JS websocket 心跳
2024-07-24 本文已影响0人
Cherry丶小丸子
// 创建 WebSocket 连接
const socket = new WebSocket('ws://your-websocket-server');
// 心跳间隔(比如 30 秒)
const heartbeatInterval = 30 * 1000;
// 心跳超时(比如 60 秒)
const heartbeatTimeout = 60 * 1000;
let heartbeatIntervalId, heartbeatTimeoutId;
// 连接打开时的回调
socket.onopen = function() {
console.log('WebSocket connection established.');
// 开始心跳
startHeartbeat();
};
// 收到服务器消息的回调
socket.onmessage = function(event) {
// 如果是 ping 消息,发送 pong 消息回应
if (isPingMessage(event.data)) {
socket.send('pong');
} else {
// 处理其他消息
}
};
// 检查心跳
function startHeartbeat() {
// 定时发送 ping 消息
heartbeatIntervalId = setInterval(function() {
socket.send('ping');
// 重置心跳超时
clearTimeout(heartbeatTimeoutId);
heartbeatTimeoutId = setTimeout(function() {
console.log('Heartbeat timeout, closing the connection.');
socket.close();
}, heartbeatTimeout);
}, heartbeatInterval);
}
// 检查消息是否为 ping
function isPingMessage(message) {
return message === 'ping';
}
// 连接关闭时的回调
socket.onclose = function() {
console.log('WebSocket connection closed.');
// 清除心跳定时器
clearInterval(heartbeatIntervalId);
clearTimeout(heartbeatTimeoutId);
console.log("WebSocket 连接关闭,重新连接...");
socket = new WebSocket('ws://your-websocket-server');
};
// 处理错误
socket.onerror = function(error) {
console.error('WebSocket error:', error);
};