- 币安的WebSocket是如何发送ping pong
- ping pong的数据格式是什么样的
- 币安的Websocket该如何做heartbeat
币安的WebSocket服务器采用标准的ping pong帧来做连接的检查。文档上面有提示,WebSocket服务器会每3分钟发送ping给客户端,接收方应该在收到后返回pong
消息。 如果客户端在10分钟内没有返回pong
消息,服务器会主动断开连接。
币安的发送的ping pong消息采用WebSocket协议的标准格式. ping 消息是一个包含 opcode 为0x9
的数据帧. pong的opcode为0xA
。而发送应用数据的帧的opcode为0x1
(Text), 0x2
(Binary). (币安只发送text格式的数据)。 这里你可以看到, ping, pong消息一种特殊的数据帧,按照标准协议的说法是控制帧(control frames)。
按照标准协议来实现的最大好处是,大多数开源的websocket 客户端的library都会有自带的方法。让使用者不需要自行实现一遍。直接调用内置方法就行。但是有的WebSocket的服务器没有按照标准协议来,给新用户带来很多困扰。
按照协议,任何一方收到ping,都需要尽快回复pong消息。利用这个机制,客户端可以定期的发送ping消息给服务器,币安的websocket服务端会立刻返回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
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len | Extended payload length |
|I|S|S|S| (4) |A| (7) | (16/64) |
|N|V|V|V| |S| | (if payload len==126/127) |
| |1|2|3| |K| | |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
| Extended payload length continued, if payload len == 127 |
+ - - - - - - - - - - - - - - - +-------------------------------+
| |Masking-key, if MASK set to 1 |
+-------------------------------+-------------------------------+
| Masking-key (continued) | Payload Data |
+-------------------------------- - - - - - - - - - - - - - - - +
: Payload Data continued ... :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Payload Data continued ... |
+---------------------------------------------------------------+
1 Like