Skip to content

Latest commit

 

History

History
35 lines (19 loc) · 1.42 KB

frame.md

File metadata and controls

35 lines (19 loc) · 1.42 KB

帧设计

mars-rpc 的数据帧主要分为 2 个部分,即数据头部与数据主体,头部定义了如唯一 id、序列化 id、数据长度等信息,一个完整的数据帧结构如图所示:

frame

下面介绍各个头部字段含义。

头部

魔数

占用 1 个字节,像 Java 的字节码一样,mars-rpc 魔数仅仅是一种象征意义,固定位 0x7F。

多信息字节

占用 1 个字节,从左往右,意义如下:

  1. 第 1 位(最高位)表示该数据帧属于请求帧还是响应帧,1 代表请求帧,0 代表响应帧;
  2. 第 2 位,表示该数据帧属于心跳帧,1 代表心跳帧,0 代表普通的方法调用帧;
  3. 第 3 ~ 5 位,表示请求帧使用的序列化框架,3 位最多能表示 8 种序列化框架(仅在请求帧中有效);
  4. 第 6 ~ 8 位,表示服务提供者的响应状态码(仅在响应帧中有效);

请求 id

占用 8 个字节,即一个 long 类型,用来标识服务消费者某次请求的唯一性。

数据主体长度

占用 4 的字节,即一个 int 类型,用来说明数据主体的长度,框架目前设置了最大数据主体的字节数不超过 8 MB,若超过,连接将会被关闭;

数据主体

数据主体是调用的方法、参数或响应结果经过序列化之后的字节内容。