message
route/protobuf
压缩package
层package
tcp
,websocket
等协议传输发包
Message
> Protobuf/JSON Encoder
> Nano Message Encoder
> Nano Packet Encoder
解包
Nano Packet Decoder
> Nano Message Decoder
> Protobuf/JSON Decoder
> Message
封装在面向连接的二进制流的通讯协议
应用层面的控制流程
header
0x01
客户端到服务器的握手请求以及服务器到客户端的握手响应0x02
客户端到服务器的握手ack0x03
心跳包0x04
数据包0x05
服务器主动断开连接通知body
user
用户自定义部分sys.version
客户端的版本号sys.type
客户端的类型heartbeat
可选,心跳时间间隔(秒)dict
可选,route 字段压缩的映射表protos
可选,protobuf压缩的数据定义200
成功500
失败501
客户端版本号不符合code
sys
user
—> handshake request(client)
<— handshake response(server)
—> handshake ack(client)
—> heartbeat Client
<— heartbeat(wait heartbeat interval)Sever
—> next heartbeat (wait heartbeat interval)Client
主要作用是封装消息头
flag
(1byte)它决定了后面的消息类型和内容的格式preserved
(4 bits)预留4位message
type(3 bits)范围为0~7route
(1 bit) 表示 route 是否压缩,影响 route 字段的长度message id
(0~5 bytes)varints 128变长编码,根据值的大小route
(0~256 bytes)根据消息类型以及内容的大小flag
字段的第 2-4
位来确定
request
----000- | <message id> | <route>
notify
----001- | <route>
response
----010- | <message id>
push
----011- | <route>
[-------0]
(flag)<length>1 byte | <utf8 string>
(route)[-------1]
(flag)<route code>
(2 bytes)官方文档: