首页 > 其他分享 >好用的websocket 心跳重连js脚本

好用的websocket 心跳重连js脚本

时间:2024-10-05 22:00:14浏览次数:1  
标签:function 定时器 WebSocket log console js ws websocket 重连

var wsUrl = 'ws://' + (document.domain || '127.0.0.1') + ':8282';

var ws = null; // WebSocket 对象
var heartbeatTimer = null; // 心跳定时器
var isReconnect = true; // 是否自动重连

// 创建 WebSocket 连接
// @auth https://so.csdn.net/so/ai
function createWebSocket() {
if ("WebSocket" in window) {
ws = new WebSocket(wsUrl);

// WebSocket 打开事件
ws.onopen = function () {
console.log("WebSocket 已连接");

// 开始心跳定时器
startHeartbeat();
};

// WebSocket 收到消息事件
ws.onmessage = function (evt) {
console.log("WebSocket 收到消息:" + evt.data);
};

// 发生错误回调
ws.onerror = function (e) {
console.log('WebSocket错误:', e);
}

// WebSocket 关闭事件
ws.onclose = function () {
console.log("WebSocket 已关闭");

// 停止心跳定时器
stopHeartbeat();

// 断线后自动重连
if (isReconnect) {
setTimeout(function () {
console.log("WebSocket 尝试重新连接");
createWebSocket();
}, 3 * 1000);
}
};
} else {
console.log("该浏览器不支持 WebSocket");
}
}

// 发送消息
function sendMessage(message) {
if (ws != null && ws.readyState == WebSocket.OPEN) {
ws.send(message);
console.log("WebSocket 发送消息:" + message);
} else {
console.log("WebSocket 连接没有建立或已关闭");
}
}

// 开始心跳定时器
function startHeartbeat(interval) {
interval = interval || 30;
heartbeatTimer = setInterval(function () {
sendMessage("heartbeat");
}, interval * 1000);
}

// 停止心跳定时器
function stopHeartbeat() {
clearInterval(heartbeatTimer);
}

// 启动 WebSocket 连接
createWebSocket();

摘自:https://blog.csdn.net/weixin_52634104/article/details/133075166

标签:function,定时器,WebSocket,log,console,js,ws,websocket,重连
From: https://www.cnblogs.com/wt645631686/p/18448557

相关文章

  • EL表达式修改js的路径
    request.setAttribute方法用于在Servlet的请求上下文中设置属性,其用途通常是为了在请求的处理过程中传递数据。它与JS路径修改无直接关系,除非你需要在请求处理中修改JS文件的路径并传递给前端页面。如果你需要在Servlet中修改JS路径并通过request.setAttribute传递给JSP页面,你可......
  • js问候-早上好、中午好、晚上好
    要在帝国CMS中实现头部问候语功能,可以通过以下几个步骤完成:创建 global.js 文件。在页面中引入 global.js 文件。调用 hello 函数。步骤详解1.创建 global.js 文件新建 global.js 文件:在网站根目录下新建一个名为 global.js 的文件。将以下代码复制到 ......
  • NodeJS阅读分享系统-计算机毕业设计源码65669
    基于微信小程序的阅读分享系统的设计与实现摘 要随着移动互联网的快速发展和普及,微信小程序作为一种轻量级、便捷的应用形式,受到了广泛关注和应用。在大学生群体中,阅读和分享是重要的学习和交流方式,因此开发一款基于Node.js的微信小程序阅读分享系统具有重要意义。通过该系......
  • 在Js中匿名函数的几种写法
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title><......
  • 基于json数据格式实现的简单数据库——jsonDB
    //基于json数据格式实现的简单数据库——jsonDB//https://www.cnblogs.com/cynchanpin/p/7068151.html//已在github上建立项目:https://github.com/ThinkerCodeChina/jsonDB/**+-----------------------------------------*jsonDB基于json数据格式构建的数据模型+--......
  • Nuxt.js 应用中的 app:mounted 钩子详解
    title:Nuxt.js应用中的app:mounted钩子详解date:2024/10/5updated:2024/10/5author:cmdragonexcerpt:app:mounted钩子在Vue应用的生命周期中扮演着重要角色,提供了在组件被挂载后的执行时机。通过合理利用这个钩子,我们能够提高组件的交互性、用户体验以及性能优化......
  • CSP-JS多省分数线分析!复赛如何准备?(附复赛流程视频)
    截止目前已经有多个省份CSP-JS的分数线已经出了,很多省份比去年提升了不少,像河南等地都提升了20多分,不过也有一些省份,天津比去年提升分数却不是很多。还有很多省份分数线没出,各位家长想要预估是否能够晋级的,以下是已出分数线省份表格统计:目前已出分数线省份省份入门组......
  • Vue Javascript 导出Excel:SheetJS/js-xlsx json_to_sheet xlsx 修改表头名称和展示的
     import*asXLSXfrom'xlsx';//展示的顺序,把data中对象的属性按照你想要的顺序排放就可以了,constheader=["pId","dID"]//展示的名称constheaderDisplay={pId:"项编号",dID:"D编号"};//将表头放剑原始数据里面去,要保证表头在数......
  • 基于Node.js+vue个人博客系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和普及,个人博客作为一种重要的网络日志形式,已经成为许多人分享生活感悟、技术心得、艺术创作的平台。个人博客不仅能够记录个人的......
  • Nuxt.js 应用中的 app:beforeMount 钩子详解
    title:Nuxt.js应用中的app:beforeMount钩子详解date:2024/10/4updated:2024/10/4author:cmdragonexcerpt:app:beforeMount是一个强大的钩子,允许开发者在用户界面挂载前控制应用的初始化过程。通过有效利用这一钩子,我们可以优化应用的用户体验,保持状态一致性并高效......