美文网首页
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