美文网首页
JS websocket 心跳

JS websocket 心跳

作者: Cherry丶小丸子 | 来源:发表于2024-07-24 23:37 被阅读0次
    // 创建 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

    相关文章

      网友评论

          本文标题:JS websocket 心跳

          本文链接:https://www.haomeiwen.com/subject/wjpphjtx.html