websocket判断当前连接是否在线
时间: 2023-12-12 15:04:22 浏览: 221
在 WebSocket 中,要判断当前连接是否在线,可以使用心跳机制,即定期向客户端发送心跳消息,客户端收到心跳消息后返回一个确认消息,如果一定时间内没有收到客户端的确认消息,则认为连接已经断开。
具体实现方法可以在服务端定时向客户端发送一个心跳消息,客户端收到心跳消息后立即返回一个确认消息,服务端收到确认消息后更新最后收到消息的时间。如果服务端在一定时间内没有收到客户端的确认消息,则认为客户端已经断开连接。
在代码实现上,可以在客户端和服务端分别实现心跳消息的发送和确认,例如通过在客户端和服务端分别设置定时器来定时发送心跳消息和确认消息。
以下是一个示例代码片段:
```javascript
// 客户端
const heartbeatInterval = 5000; // 心跳间隔时间
let heartbeatTimer = null; // 定时器对象
function sendHeartbeat() {
const message = {
type: 'heartbeat',
timestamp: Date.now(),
};
websocket.send(JSON.stringify(message));
}
function startHeartbeat() {
heartbeatTimer = setInterval(() => {
sendHeartbeat();
}, heartbeatInterval);
}
function stopHeartbeat() {
clearInterval(heartbeatTimer);
}
// 服务端
const heartbeatTimeout = 10000; // 心跳超时时间
let lastMessageTime = Date.now(); // 最后收到消息的时间
function handleHeartbeat(message) {
if (message.type === 'heartbeat') {
lastMessageTime = message.timestamp;
const response = {
type: 'heartbeat_ack',
timestamp: Date.now(),
};
websocket.send(JSON.stringify(response));
}
}
function startHeartbeatCheck() {
setInterval(() => {
const currentTime = Date.now();
if (currentTime - lastMessageTime > heartbeatTimeout) {
// 连接已经断开
websocket.close();
}
}, heartbeatTimeout);
}
```
在上面的代码中,客户端定时向服务端发送心跳消息,并且在收到服务端的确认消息后更新最后收到消息的时间。服务端定时检测最后收到消息的时间,如果超过一定时间则认为连接已经断开。如果服务端检测到连接已经断开,则可以关闭连接。
阅读全文