Socket.D v2.5.9

协议帧码详解

</> markdown

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,答复实体的数据