背景
很多时候,客户端一个请求过来,服务端可能需要发多个响应消息。典型地,当客户端请求加载登录加载资源完成,服务端需要推送非常多的消息。功能模块越多,消息也越多。这个时候,可能就需要对下发的客户端协议进行优化。
个人理解,针对这种情况,比较好的优化方式是整合多个小消息一起下发。也就是说,对于多个消息,我们不直接一个一个下发,而是把多个消息看作一个特殊的消息组合下发。
多包组合的优点
1. 省流量。由于每个消息都会一些包头,几个消息一起下发也只需要一个包头。
2. 防止客户端解包降帧。客户端每帧拆包的数量是有限的,瞬间拆多个包看起来就会卡。
3. 提高游戏客户端与服务器之间的交互效率,减少通信延迟。
当然,组合包的应用场合,应该是整合多个小的消息。如果单独的消息体信息量大,那么就没必要整合了。
代码设计
对于我们的服务端框架,加上一个组合包,代码也很少。
首先,由于每个消息都带有模块号,类型id,还有消息体,我们有必要抽象出这个整体概念,也是为了传输数据方便。
public class Packet {
@Protobuf(order =