介绍
心跳是客户端定时给服务端发送消息,证明客户端是在线的,如果超过一定时间没有发送就是离线了。WebSocket提供了心跳机制的相关配置,可以通过以下方式实现:
1.使用Ping和Pong方式实现WebSocket心跳机制。
2.使用sub和unsub订阅与取消订阅,实现WebSocket心跳机制。
实现
text
1.客户端建立WebSocket连接。
2.客户端向服务器发送心跳数据包,服务器接收并返回一个表示接收到心跳数据包的响应。
3.当服务器没有及时接收到客户端发送的心跳数据包时,服务器会发送一个关闭连接的请求。
4.服务器定时向客户端发送心跳数据包,客户端接收并返回一个表示接收到心跳数据包的响应。
5.当客户端没有及时接收到服务器发送的心跳数据包时,客户端会重新连接WebSocket
1.客户端建立WebSocket连接。
2.客户端向服务器发送心跳数据包,服务器接收并返回一个表示接收到心跳数据包的响应。
3.当服务器没有及时接收到客户端发送的心跳数据包时,服务器会发送一个关闭连接的请求。
4.服务器定时向客户端发送心跳数据包,客户端接收并返回一个表示接收到心跳数据包的响应。
5.当客户端没有及时接收到服务器发送的心跳数据包时,客户端会重新连接WebSocket
sub 与 unsub
1.向 Websocket 发送消息
json
{
"type": "sub", //固定为 sub
"topic": "topic", // topic ,见 topic 列表
"parameter": {}, //参数,不同的订阅请求,支持的参数不同
"id": "request-id" + Math.random().toFixed(13).slice(-13) //请求 Id ,服务端在推送消息时,会将此标识一并返回
}
{
"type": "sub", //固定为 sub
"topic": "topic", // topic ,见 topic 列表
"parameter": {}, //参数,不同的订阅请求,支持的参数不同
"id": "request-id" + Math.random().toFixed(13).slice(-13) //请求 Id ,服务端在推送消息时,会将此标识一并返回
}
在取消订阅之前,多次传入相同的id是无效的,不会重复订阅。
2.向 WebSocket 发送消息,格式为:
json
{
"type":"unsub", //固定为 unsub
"id": "request-id" //与订阅请求 Id 一致
}
{
"type":"unsub", //固定为 unsub
"id": "request-id" //与订阅请求 Id 一致
}
ping 与 pong
发送方->接收方:ping
接收方->发送方:pong
text
当收到Ping帧的时候需要立即返回一个Pong帧
当收到Ping帧的时候需要立即返回一个Pong帧