nano 协议格式
两层编码
message
route/protobufpackagepackage
tcpwebsocket协议层
发包
MessageProtobuf/JSON EncoderNano Message EncoderNano Packet Encoder解包
Nano Packet DecoderNano Message DecoderProtobuf/JSON DecoderMessageNano Package
封装在面向连接的二进制流的通讯协议
控制包
应用层面的控制流程
- 客户端和服务器的握手
- 心跳
- 服务器主动断开连接的通知
数据包
- 客户端和服务器之间传输应用数据
nano 数据包格式
header0x010x020x030x040x05body- 二进制的传输内容
- 数据内容 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)
flagpreservedmessageroutemessage idroute消息类型(Message Type)
flag2-4request----000- | | notify----001- | response----010- | push----011- | 路由压缩标志(Route Compression Flag)
[-------0]1 byte | [-------1]