第六章 心跳检测
客户端需要间隔一段时间发送心跳检测 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 帧一致。