README.md - 文档

protocol 包

功能

定义 Gateway 与 Worker 之间的 二进制通讯协议,包括数据结构、命令字常量、编解码函数。

协议格式

包结构(28 字节头 + 变长数据)

 0                   4     5              9    11             15   17             21  22    24             28
 ├───────────────────┼─────┼──────────────┼────┼──────────────┼────┼──────────────┼───┼─────┼──────────────┤
 │    pack_len(4B)   │cmd  │ local_ip(4B) │port│ client_ip(4B)│port│conn_id(4B)   │flg│gw_pt│ ext_len(4B)  │
 │    uint32 BE      │1B   │ uint32 BE    │2B  │ uint32 BE    │2B  │uint32 BE     │1B │2B BE│ uint32 BE    │
 ├───────────────────┴─────┴──────────────┴────┴──────────────┴────┴──────────────┴───┴─────┴──────────────┤
 │                                      ext_data (变长)                                                    │
 ├─────────────────────────────────────────────────────────────────────────────────────────────────────────┤
 │                                      body (变长)                                                        │
 └─────────────────────────────────────────────────────────────────────────────────────────────────────────┘

粘包处理

使用 Input() 函数从 TCP 流前 4 字节读取 pack_len,确保接收完整包后再解码。

命令字常量

Gateway → Worker(事件通知)

常量 说明
CmdOnConnect 1 新客户端连接
CmdOnMessage 3 客户端消息
CmdOnClose 4 客户端断开
CmdOnWebSocketConnect 205 WebSocket 握手完成

Worker → Gateway(指令)

常量 说明
CmdSendToOne 5 发送给单个客户端
CmdSendToAll 6 广播
CmdKick 7 踢出客户端
CmdDestroy 8 直接销毁连接
CmdBindUID 12 绑定 UID
CmdUnbindUID 13 解绑 UID
CmdSendToUID 14 向 UID 发送
CmdJoinGroup 20 加入分组
CmdLeaveGroup 21 离开分组
CmdSendToGroup 22 向分组发送
CmdUngroup 27 解散分组
CmdSelect 25 条件查询

查询类命令

常量 说明
CmdIsOnline 11 判断是否在线
CmdGetAllClientSessions 10 获取所有 session
CmdGetClientCountByGroup 24 获取组在线数
CmdGetClientIDByUID 15 获取 UID 绑定的连接
CmdGetGroupIDList 26 获取在线组列表
CmdGetSessionByClientID 203 获取指定连接 session

导出函数

函数 说明
NewEmptyData() 创建空的 GatewayData
Encode(data) GatewayData → 二进制
Decode(buf) 二进制 → GatewayData
Input(buf) TCP 粘包处理,返回包长度