1.需求
- 尽量小的数据包
- 自动压缩路由,用int替代string
- 数据包分成2部分,一部分(packet)给框架用,另一部分(message)给业务用
- 数据包中包含请求类型
- 支持多种格式的数据解析
- 如果数据格式是json,protobuf可以上传object name
2.报文协议
packet.body(message)
-
报文分为2部分,packet和message
-
packet
-
head
5bytes
-
type
1byte
- Handshake = 0x01 客户端握手请求
- HandshakeAck = 0x02 服务器握手ack
- Heartbeat = 0x03 心跳
- Data = 0x04 数据包
- Kick = 0x05 客户端下线
-
len
3bytes,body的长度
-
subpackage
1byte,分包,但是没实现
-
-
body
range 0-64kb
二进制数据
-
message
就是body
-
head
range 1- xx bytes
-
flag
-
empty
2bit
-
message type
3bits
// Message types // s: server // c: client // who can send message type Request Type = 0x00 // c Push = 0x01 // c Response = 0x02 // s Notify = 0x03 // s Ack = 0x04 // s
-
route
1bit,是否压缩路由
-
date type
2bits
-
-
len
1byte,message id的长度
-
message id
range 0-8bytes,uint64类型
-
len
1byte,route的长度
-
route
路由的内容,如果是字符串,它就是没有压缩的路由,如果是数字它就是压缩路由
-
len
1byte,obj name的长度
-
obj name
range 0-256bytes
后面data里存的对象的名字
-
-
data
range 0-约60kb
-
-
3.使用
- 具体案例看minigate/component/codec/message/message_test.go
源码地址,未经允许禁止转载