mars-rpc 的数据帧主要分为 2 个部分,即数据头部与数据主体,头部定义了如唯一 id、序列化 id、数据长度等信息,一个完整的数据帧结构如图所示:
下面介绍各个头部字段含义。
占用 1 个字节,像 Java 的字节码一样,mars-rpc 魔数仅仅是一种象征意义,固定位 0x7F。
占用 1 个字节,从左往右,意义如下:
- 第 1 位(最高位)表示该数据帧属于请求帧还是响应帧,1 代表请求帧,0 代表响应帧;
- 第 2 位,表示该数据帧属于心跳帧,1 代表心跳帧,0 代表普通的方法调用帧;
- 第 3 ~ 5 位,表示请求帧使用的序列化框架,3 位最多能表示 8 种序列化框架(仅在请求帧中有效);
- 第 6 ~ 8 位,表示服务提供者的响应状态码(仅在响应帧中有效);
占用 8 个字节,即一个 long 类型,用来标识服务消费者某次请求的唯一性。
占用 4 的字节,即一个 int 类型,用来说明数据主体的长度,框架目前设置了最大数据主体的字节数不超过 8 MB,若超过,连接将会被关闭;
数据主体是调用的方法、参数或响应结果经过序列化之后的字节内容。