第六章 心跳检测

客户端需要间隔一段时间发送心跳检测 ping 帧,服务器收到后需尽快发送心跳应答 pong 帧。

ping 帧格式

  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-------------------------------+-------------------------------+
  |        [id from client]       |       [id from server]        |
  +-------------------------------+-------------------------------+
  |                        timestamp ...                          |
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  |                    ... timestamp [curent time]                |
  +-+-+-+-----+-+-+-------+-------+-------------------------------+
  |S|P|F| RSV |S|F|  RSV  |OPCODE |          Payload len          |
  |T|A|R| [0] |L|I|  [0]  |[0x5]  |        [Payload.length]       |
  |R|C|A|     |O|N|       |       |                               |
  |E|K|G|     |W| |       |       |                               |
  |0|0|0|     |0|0|       |       |                               |
  +-+-+-+-----+-+-+-------+-------+-------------------------------+
  :                      Payload [some data]                      :
  +---------------------------------------------------------------+

Session ID 字段分别写入客户端与服务端生成的随机数,timestamp 字段写入当前时间戳,精确到毫秒。接下来 STRE、PACK、FRAG、SLOW、FIN 设置为 0。RSV 字段设置为 0。OPCODE 字段设置为 0x5。Payload字段 写入预先定义的固定内容(上层应用程序可配置),Payload len 字段写入 Payload 字段的长度。

pong 帧格式

  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-------------------------------+-------------------------------+
  |        [id from client]       |       [id from server]        |
  +-------------------------------+-------------------------------+
  |                        timestamp ...                          |
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  |                    ... timestamp [curent time]                |
  +-+-+-+-----+-+-+-------+-------+-------------------------------+
  |S|P|F| RSV |S|F|  RSV  |OPCODE |          Payload len          |
  |T|A|R| [0] |L|I|  [0]  |[0x6]  |        [Payload.length]       |
  |R|C|A|     |O|N|       |       |                               |
  |E|K|G|     |W| |       |       |                               |
  |0|0|0|     |0|0|       |       |                               |
  +-+-+-+-----+-+-+-------+-------+-------------------------------+
  :                   Payload [data from client]                  :
  +---------------------------------------------------------------+

timestamp 字段写入当前时间戳,精确到毫秒。OPCODE 字段设置为 0x6,Payload 字段写入客户端发来的数据内容,其他字段设置和 ping 帧一致。