服务器与客户端之间通信格式以及协议字,客户端和服务器的通信,protobuf和协议格式...

5c59186f12cd639faa8fef08d37a9a61.png

游戏服务器和客户端的通信有很多种形式,有的用http,有的用websocket,不过最常见的还是socket服务器,socket 服务器在游戏中是最常见的,至于为什么和怎么创建,等以后再说,今天先来聊聊服务器和客户端交谈的协议。协议的定义是服务端和客户端沟通的结果,形成一致的数据格式,这样大家才好解析,知道对方在说什么,在做什么。

在最初的时候有的人自定义格式,虽然紧凑,但是可能会存在一些问题,不够稳定。也有的人用xml,也有人用json,存在的问题就是格式虽然很好,但是网络包太大,不太适合,问题存在必然就要解决,有没有一种方案可以解决上面的问题?答案显而易见,就是今天聊的protobuf。

protobuf 是谷歌开源的跨平台的一种通讯协议,更紧凑,更高效。废话不多说,进入正文。

1、Java项目引用

pom.xml 中加入以下依赖,版本可以自己根据需要进行选择

com.google.protobufprotobuf-java3.6.1

2、protobuf 的文件定义格式

optionjava_package ="com.gamwatcher.soulmsg";optionjava_outer_classname = "SoulMsg";optionjava_multiple_files = true;messageSOUL_UP_OUT{requiredint64uid =1;repeatedint64costuid =2;optionalint64useExp = 3;}基础类型

ccca129a8d4d3de7898a664df0019625.png

特殊字段

961b2784ff60ec50615b75265ae03b28.png

2、生成java类

下载protoc:https://github.com/protocolbuffers/protobuf/releases

protoc.exe --java_out = ../../src/main/java **.proto3、使用协议

SOUL_UP_OUT.Builder builder = SOUL_UP_OUT.newBuilder();builder.setUid(1);builder.addAllCostUid(costUidList);builder.setUserExp(1000)builder.build()4、如何在游戏项目中使用

正常的协议格式:

len + 加密的 [headMsgId + proto二进制数据]

常用的加密算法:AES和rsa,DES,选择一个简单的效率高的,如果游戏大火了可以换一个稍微复杂的加密算法,小事情,不重要

客户端解析出根据长度读出数据长度进行解析。so easy!!!,服务端同样的规则。客户端和服务器通信就是这么简单。

总结:protobuf 不过是一个协议格式,省去了我们自定义消息的过程,既然有现成的轮子就没必要自己造了,况且我们造的还不如别人,先会用,再去了解原理,没什么大不了。

a3f4647cd4a2dda776174a9ece74a6a0.png

举报/反馈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值