协议帧码详解
Socket.D 为固定长帧设计。采用两种风格定义:
- 简码:只有 flag 字段(止前只有 Ping, Pong)
- 全码:所有字段必须有或者空占位(字符串为"",字节数组为[])
协议实现注意:
- String 的“字符集”由实现框架通过配置决定
- 当使用 udp 传输时,帧长度不能超过 1.4K
下面主要采用 “逻辑结构” 表述
1、连接帧
10 Connect Frame
frame: {flag:10, message: {sid:"$sid", event:"", entity: {metaString:"Socket.D=1.0", data:$serverUrl}}}
- $sid,流标识(使用 guid)
- $serverUrl,服务端地址
- "Socket.D=1.0",客户端协议版本号(目前只有 1.0)
11 Connack Frame
frame: {flag:11, message: {sid:"$r.sid", event:"", entity: {metaString:"Socket.D=1.0", data:$r.data}}
- $r.sid,来源帧的 sid
- $r.data,来源帧的实体 data
- "Socket.D=1.0",服务端协议版本号(目前只有 1.0)
“Connack”,相当于是把 "Connect" 的数据回发,并告知服务端协议版本号
2、心跳帧
20 Ping Frame
frame: {flag:20}}
"Ping" 帧,消息部分不需要。可省点流量
21 Pong Frame
frame: {flag:21}}
"Pong" 帧,消息部分不需要。可省点流量
3、辅助帧
30 Close Frame
frame: {flag:30, message: {sid:"$sid", event:"", entity: {metaString:"code=$code", data:""}}}
- $sid,流标识(使用 guid)
- $code,关闭代码(1000: 开始关闭,提示不要用这个连接发数据;1001: 关闭,关闭连接并触发 onClose 事件)
31 Alarm Frame
frame: {flag:31, message: {sid:"$r.sid", event:"$r.event", entity: {metaString:"$r.metaString", data:"$alarm"}}
- $r.sid,来源帧的 sid
- $r.event,来源帧的 event
- $r.metaString,来源帧的 metaString
- $alarm,告警信息
4、消息帧
40 Message Frame
frame: {flag:40, message: {sid:"$sid", event:"$event", entity: {metaString:"$metaString", data:$data}}}
- $sid,流标识(使用 guid)
- $event,事件
- $metaString,发送实体的元信息字符串(urlQueryString 格式,例:a=1&b=2)
- $data,发送实体的数据
41 Request Frame
frame: {flag:41, message: {sid:"$sid", event:"$event", entity: {metaString:"$metaString", data:$data}}}
- $sid,流标识(使用 guid)
- $event,事件
- $metaString,发送实体的元信息字符串(urlQueryString 格式,例:a=1&b=2)
- $data,发送实体的数据
42 Subscribe Frame
frame: {flag:42, message: {sid:"$sid", event:"$event", entity: {metaString:"$metaString", data:$data}}}
- $sid,流标识(使用 guid)
- $event,事件
- $metaString,发送实体的元信息字符串(urlQueryString 格式,例:a=1&b=2)
- $data,发送实体的数据
48 Reply Frame
frame: {flag:48, message: {sid:"$r.sid", event:"$r.event", entity: {metaString:"$metaString", data:$data}}}
- $r.sid,来源帧的 sid
- $r.event,来源帧的 event
- $metaString,答复实体的元信息字符串(urlQueryString 格式,例:a=1&b=2)
- $data,答复实体的数据
49 End Reply Frame
frame: {flag:49, message: {sid:"$r.sid", event:"$r.event", entity: {metaString:"$metaString", data:$data}}}
- $r.sid,来源帧的 sid
- $r.event,来源帧的 event
- $metaString,答复实体的元信息字符串(urlQueryString 格式,例:a=1&b=2)
- $data,答复实体的数据