WebSocket API 支持双向心跳,无论是 Server 还是 Client 都可以发起 ping message,对方返回 pong message。
WebSocket Server 发送心跳:
{"ping": 1536743613834}
WebSocket Client 会返回:
{"pong": 1536743613834}
注:返回的数据里 "pong" 的值为收到的 "ping" 的值
注:WebSocket Client 和 WebSocket Server 建立连接之后,WebSocket Server 每隔 10s(这个频率可能会变化)会向 WebSocket Client 发起一次心跳,WebSocket Client 忽略心跳2次后,WebSocket Server 将会主动断开连接。
┌────────┐ ┌────────┐
│ Client │ │ Server │
└───┬────┘ └───┬────┘
│ {"ping": 1536743613834} │
│<─────────────────────────────────┤
│ │ wait 10s
│ ├───┐
│ │<──┘
│ {"ping": 1536743613834} │
│<─────────────────────────────────┤
│ │
│ {"pong": 1536743613834} │
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄>│
│ │
注:WebSocket Client 发送最近2次心跳 message 中的其中一个 "ping" 的值,WebSocket Server 都会保持 WebSocket 连接
┌────────┐ ┌────────┐
│ Client │ │ Server │
└───┬────┘ └───┬────┘
│ {"ping": 1523778470416} │
│<─────────────────────────────────┤
│ │ wait 10s
│ ├───┐
│ │<──┘
│ {"ping": 1523778475416} │
│<─────────────────────────────────┤
│ │ wait 10s
│ ├───┐
│ │<──┘
│ │
│ │ close WebSocket connection
│ ├───┐
│ │<──┘
│ │
注:WebSocket Client 忽略心跳2次后,WebSocket Server 将会主动断开连接。
WebSocket Client 发送心跳:
{"ping": 1536743614839}
WebSocket Server 会返回:
{"pong": 1536743614839}
注:返回的数据里面的 "pong" 的值为收到的 "ping" 的值
注:如果Client发送 ping message n次(n由Client自定义)都没有收到 pong message,Client需要断开 Websocket,重新连接。
注:如果Client连接频繁被Server断开,请检查Client是否回复pong message,确保Client能正常回应Server发起的ping message。