游戏的网络通信常用的协议有HTTP和自定义Socket。HTTP消息长,用于速度要求低的情景比如登录注册。自定义消息短,用于游戏业务。自定义消息中以自定义二进制和protobuf两类方案最多。
我们知道消息会继承一个基类,基类有一个消息类型枚举。接收端在反序列化之前,字节流阶段就要知道消息类型,然后调用一个类型枚举-Type字典反序列化。
客户端给服务器的消息和服务器的回复各用一个基类还是共用一个基类?
回复消息都有一个bool ok,string errorMsg。肯定要回复弄一个基类。
消息类型枚举有XXX就必有XXXReply?
消息基类用类还是接口?
本来理所当然的以为用基类。而看了一个教程说结构体比类性能好,但是结构体不能继承基类,那么继承接口。然后在接口里有一个返回消息类型Id的属性。结构体里实现这个属性,直接写消息类型Id。
消息加头的问题
为了处理分包粘包最前面是长度头,然后识别消息类型是类型头。现在还要加一个AccessToken令牌头。
我们发现长度头在最前面,但是它随后面内容的长度变化。如果用MemoryStream,把所有头顺序写入,那么必须能预测消息体的长度。
4235

被折叠的 条评论
为什么被折叠?



