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]