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);
};

https://blog.csdn.net/zz130428/article/details/131912272

上一篇下一篇

猜你喜欢

热点阅读