Skip to content

WebSocket心跳机制

更新时间:

介绍

心跳是客户端定时给服务端发送消息,证明客户端是在线的,如果超过一定时间没有发送就是离线了。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帧