心跳

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。