当前位置: 首页 > news >正文

利用websocket检测网络连接稳定性

浏览器中打开F12,控制台中输入以下内容 > 回车 > 等待结果
连接关闭 表示断网

在这里插入图片描述

let reconnectDelay = 1000; // 初始重连间隔
let pingInterval = null;
let socketManuallyClosed = false; // 标志是否手动关闭

function createWebSocket() {
    if (socketManuallyClosed) return;

    const socket = new WebSocket("wss://echo.websocket.org");

    socket.onopen = function () {
        console.log(new Date().toLocaleString(), "WebSocket 连接成功");
        socket.send("Hello WebSocket!");

        // 发送心跳包(每 30 秒)
        pingInterval = setInterval(() => {
            if (socket.readyState === WebSocket.OPEN) {
                socket.send("ping");
                // console.log(new Date().toLocaleString(), "发送 ping");
            }
        }, 30000);

        // 重置重连时间
        reconnectDelay = 1000;
    };

    socket.onmessage = function (event) {
    	if(event.data === 'ping') return
        console.log(new Date().toLocaleString(), "收到消息:", event.data);
    };

    socket.onerror = function (error) {
        console.error(new Date().toLocaleString(), "WebSocket 错误:", error);
        socket.close(); // 触发 onclose 进行重连
    };

    socket.onclose = function () {
        console.log(new Date().toLocaleString(), "WebSocket 连接关闭");

        clearInterval(pingInterval);

        if (!socketManuallyClosed) {
            setTimeout(() => {
                console.log("尝试重新连接 WebSocket...");
                createWebSocket();
            }, reconnectDelay);

            // 指数退避:每次失败后重连间隔增加,最大 60 秒
            reconnectDelay = Math.min(reconnectDelay * 2, 60000);
        }
    };
}

// 启动 WebSocket 连接
createWebSocket();

相关文章:

  • MySQL 清空表的数据
  • CommonLang3-使用介绍
  • SQL知识体系
  • 统一的多摄像头3D感知框架!PETRv2论文精读
  • RV1126解码模块初始化(二)
  • 图床 PicGo+GitHub+Typora的下载安装与使用
  • 开源Web主机控制面板ISPConfig配置DNS
  • Cursor 无限续杯
  • Android平台基于SmartPlayer实现多实例RTSP|RTMP播放器
  • 从WebRTC到EasyRTC:嵌入式适配的视频通话SDK实现低延迟、高稳定性音视频通信
  • 解锁Linux“故障宝藏”:Core Dump分析秘籍(转)
  • 基于微信小程序的宿舍报修管理系统设计与实现,SpringBoot(15500字)+Vue+毕业论文+指导搭建视频
  • 解锁 Python 的 * 和 **:从参数传递到容器构建的解包技巧
  • 单元测试方法的使用
  • 【Linux系统】生产者消费者模型:基于环形队列(信号量机制)
  • 网络安全入门攻击与防御实战(二)
  • for...in 遍历属性的顺序是不确定的
  • Java 大视界 -- 人才需求与培养:Java 大数据领域的职业发展路径(92)
  • C++ ——const关键字
  • 探秘Transformer系列之(3)---数据处理
  • 香港根据《维护国家安全条例》订立附属法例
  • 外媒:初步结果显示,菲律宾前总统杜特尔特当选达沃市市长
  • 欧元区财长会讨论国际形势及应对美国关税政策
  • 济南市委副秘书长吕英伟已任历下区领导
  • 从600名外到跻身大满贯,孙发京:走过的路成就了现在的我
  • “春申阡陌”漆画展:将传统漆艺融入现代创作