协议设计
心跳包
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+---------------------------------------------------------------+-+-------------+---------------------------------------------------------------+
| size |h| extcode | heartbeat time (ns) |
+---------------------------------------------------------------+-+-------------+---------------------------------------------------------------+
-
size: 4 bytes
- 包长度位
- 长度固定为 4 字节,且不可修改
-
header: 1 bytes
-
包头标识
-
长度固定为 1 字节,且不可修改
-
h: 1 bit
- 心跳标识位
- 长度固定为 1 位,且不可修改
- 心跳包固定为%x1
-
extcode: 7 bit
- 扩展操作码位
- 长度固定为 7 位,且不可修改
- 保留位
-
-
-
heartbeat time: 8 bytes
- 服务端下行心跳时间
- 上行心跳包无需携带心跳数据,下行心跳包默认携带 8 bytes 的服务器时间(ns)
- 此协议数据由 etc.packet.heartbeatTime 配置参数进行控制
数据包
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+---------------------------------------------------------------+-+-------------+-------------------------------+-------------------------------+
| size |h| extcode | route | seq |
+---------------------------------------------------------------+-+-------------+-------------------------------+-------------------------------+
| message data ... |
+-----------------------------------------------------------------------------------------------------------------------------------------------+
-
size: 4 bytes
- 包长度位
- 长度固定为 4 字节,且不可修改
-
header: 1 bytes
-
包头标识
-
长度固定为 1 字节,且不可修改
-
h: 1 bit
- 心跳标识位
- 长度固定为 1 位,且不可修改
- 数据包固定为%x0
-
extcode: 7 bit
- 扩展操作码位
- 长度固定为 7 位,且不可修改
- 保留位
-
-
-
route: 1 bytes | 2 bytes | 4 bytes
- 消息路由号
- 长度默认为 2 字节,可通过打包器配置 etc.packet.routeBytes 进行修改
- 此参数由业务打包器 packet.Packer 打包,服务器开发者和客户端开发者均要关心此参数
-
seq: 0 bytes | 1 bytes | 2 bytes | 4 bytes
- 消息序列号
- 长度默认为 2 字节,可通过打包器配置 etc.packet.seqBytes 进行修改
- 可通过将打包器配置 etc.packet.seqBytes 设置为 0 来屏蔽使用消息序列号
- 消息序列号常用于请求/响应模型的消息对儿的确认
- 此参数由业务打包器 packet.Packer 打包,服务器开发者和客户端开发者均要关心此参数
-
message data: n bytes
- 消息数据
- 长度默认为 5000 字节,可通过打包器配置 etc.packet.bufferBytes 进行修改
- 建议较大的消息包通过拆包的方式来进行发送,切勿盲目扩大消息数据的长度
- 此参数由业务打包器 packet.Packer 打包,服务器开发者和客户端开发者均要关心此参数