服务端与客户端之间的数据流
base 128 Varint
base 128 Varint是一种处理整数的变长二进制编码算法,当给定的一个整数,能用1个字节存储时,用一个字节的内存,需要两个字节存储时,用两个字节的内存,而不是统一固定用4个字节或者8个字节。可以对变化的整数与整数占用的字节进行读与写。
数据流分析
服务端向客户端发送数据流,数据流由多个包压缩、加密、拼包组成。本文档对数据流中一个包进行说明与分析,如图1所示。
图1 包的组成

-
长度:为可变长,通过base 128 Varint编码,读取包中前面的5个字节,会返回两个值:实际存储数据的字节数和proto协议数据占用的整数值,此时,长度的实际长度为返回值中的实际存储数据字节数。
-
message ForwardNullUserPmd_CS:根据base 128 Varint编码返回的字节数与整数值,可以确定具体的message ForwardNullUserPmd_CS协议。message ForwardNullUserPmd_CS协议中,协议示例如下,
message ForwardNullUserPmd_CS协议示例:
message ForwardNullUserPmd_CS
{
optional uint32 byCmd = 1;
optional uint32 byParam = 2;
optional uint32 time = 3; // client use
optional uint64 fid = 4; // server used for forward
optional bytes data = 5; // data
optional uint64 prototype = 6; // 0:proto,1:json,2:http
optional uint32 bitmask = 7; // FrameHeader位枚举
}
其中,data包含byCmd(一级消息号)、byParam(二级消息号)与业务内容,其中一级消息号与二级消息号为必选,业务内容为可选。