nano 协议格式
两层编码
message
route/protobufpackage
package
tcpwebsocket
协议层
发包
MessageProtobuf/JSON EncoderNano Message EncoderNano Packet Encoder
解包
Nano Packet DecoderNano Message DecoderProtobuf/JSON DecoderMessage
Nano Package
封装在面向连接的二进制流的通讯协议
控制包
应用层面的控制流程
- 客户端和服务器的握手
- 心跳
- 服务器主动断开连接的通知
数据包
- 客户端和服务器之间传输应用数据
nano 数据包格式
header
0x010x020x030x040x05
body
- 二进制的传输内容
- 数据内容 body(length bytes)
- 二进制的传输内容
握手 Package
- 握手请求
usersys.versionsys.type
- 握手响应
heartbeatdictprotos200500501codesysuser
- 正常握手的流程
—> handshake request(client)<— handshake response(server)—> handshake ack(client)
心跳 Package
- 心跳包的length字段为0,body为空
- 心跳超时时间为2倍的心跳间隔时间
- 心跳的流程
—> heartbeat Client<— heartbeat(wait heartbeat interval)Sever—> next heartbeat (wait heartbeat interval)Client
数据 Package
- 客户端和服务器之间传输数据所用
- body 部分是由上层传下来的任意二进制数据
- package 层不会 对body内容做任何处理
服务器主动断开 Package
- 如:踢掉某个在线玩家
- 会先向客户端发送一个控制消息,然后再断开连接
Nano Message
主要作用是封装消息头
标志位(flag)
flag
preservedmessageroute
message idroute
消息类型(Message Type)
flag2-4
request
----000- | |
notify
----001- |
response
----010- |
push
----011- |
路由压缩标志(Route Compression Flag)
[-------0]
1 byte |
[-------1]