Skip to content

服务端与客户端之间的数据流

base 128 Varint

base 128 Varint是一种处理整数的变长二进制编码算法,当给定的一个整数,能用1个字节存储时,用一个字节的内存,需要两个字节存储时,用两个字节的内存,而不是统一固定用4个字节或者8个字节。可以对变化的整数与整数占用的字节进行读与写。

数据流分析

服务端向客户端发送数据流,数据流由多个包压缩、加密、拼包组成。本文档对数据流中一个包进行说明与分析,如图1所示。

图1 包的组成

  1. 长度:为可变长,通过base 128 Varint编码,读取包中前面的5个字节,会返回两个值:实际存储数据的字节数和proto协议数据占用的整数值,此时,长度的实际长度为返回值中的实际存储数据字节数。

  2. 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(二级消息号)与业务内容,其中一级消息号与二级消息号为必选,业务内容为可选。