解决 JS WebSocket 心跳检测 重连

解决 JS WebSocket 心跳检测 重连

在这里插入图片描述

文章目录

      • 解决 JS WebSocket 心跳检测 重连
        • 一、WebSocket 心跳检测的作用
        • 二、心跳检测的处理方案
          • 1. 创建 WebSocket 连接
          • 2. 心跳参数设置
          • 3. 心跳检测逻辑
          • 4. 心跳包响应处理
          • 5. 断线重连机制
        • 三、总结

一、WebSocket 心跳检测的作用

WebSocket 是一种在单个 TCP 连接上进行全双工通讯的协议。然而,由于网络条件、防火墙设置或服务器配置等因素,WebSocket 连接可能会因为长时间没有数据传输而被认为是非活跃的,进而被关闭。为了保持连接的稳定性和可靠性,WebSocket 心跳检测机制显得尤为重要。其主要作用包括:

  1. 保持连接活跃:通过定期发送心跳包,可以确保 WebSocket 连接保持活跃状态,避免因长时间无数据传输而被网络设备或防火墙关闭。
  2. 检测连接状态:心跳包的发送和接收可以实时检测连接的状态。如果服务器没有响应心跳包,客户端可以判断连接可能已经断开,并采取相应的处理措施,如重新连接或显示错误信息。
  3. 减少资源浪费:通过心跳机制,可以及时关闭无效的连接,减少服务器资源的浪费。

二、心跳检测的处理方案

在 JavaScript 中,实现 WebSocket 心跳检测主要涉及到前端定时发送心跳包和检测服务器的响应。以下是一个详细的处理方案:

1. 创建 WebSocket 连接

首先,需要创建一个 WebSocket 连接。

const socket = new WebSocket('ws://your-websocket-server');
2. 心跳参数设置

定义心跳间隔和心跳超时时间。

const heartbeatInterval = 30 * 1000; // 心跳间隔为30秒
const heartbeatTimeout = 60 * 1000; // 心跳超时时间为60秒
3. 心跳检测逻辑

通过 JavaScript 的 setIntervalsetTimeout 函数来实现心跳检测逻辑。

let heartbeatIntervalId, heartbeatTimeoutId;// 心跳检测启动函数
function startHeartbeat() {heartbeatIntervalId = setInterval(function() {socket.send('ping'); // 发送心跳包// 重置心跳超时定时器clearTimeout(heartbeatTimeoutId);heartbeatTimeoutId = setTimeout(function() {console.log('Heartbeat timeout, closing the connection.');socket.close(); // 超时未收到响应,关闭连接// 这里可以添加重新连接的逻辑}, heartbeatTimeout);}, heartbeatInterval);
}// WebSocket 连接打开时启动心跳检测
socket.onopen = function() {console.log('WebSocket connection established.');startHeartbeat();
};// 收到服务器消息时处理
socket.onmessage = function(event) {// 判断是否为心跳响应(如pong消息)if (isPongMessage(event.data)) {// 重置心跳超时定时器clearTimeout(heartbeatTimeoutId);// 如果需要,可以再次启动心跳定时器(在某些实现中可能不需要)} else {// 处理其他消息}
};// 判断消息是否为pong消息
function isPongMessage(message) {return message === 'pong';
}// 连接关闭时清除定时器
socket.onclose = function() {console.log('WebSocket connection closed.');clearInterval(heartbeatIntervalId);clearTimeout(heartbeatTimeoutId);// 可以添加重新连接的逻辑
};// 处理错误
socket.onerror = function(error) {console.error('WebSocket error:', error);// 处理错误,例如重新连接
};

4. 心跳包响应处理

在服务器端,需要配置以响应客户端发送的心跳包。当服务器收到心跳包(如 'ping')时,应回复一个心跳响应(如 'pong')。

5. 断线重连机制

为了进一步增强连接的稳定性,可以在连接关闭时(onclose 事件触发时)添加自动重连的逻辑。这可以通过递归调用创建 WebSocket 连接的函数或使用第三方库(如 ReconnectingWebSocket)来实现。

function reconnect() {setTimeout(function() {// 重新创建 WebSocket 连接socket = new WebSocket('ws://your-websocket-server');// 重新绑定事件处理函数socket.onopen = function() { ... };socket.onmessage = function(event) { ... };socket.onclose = function() { ... };socket.onerror = function(error) { ... };// 启动心跳检测startHeartbeat();}, 1000); // 延迟1秒重连,避免过于频繁
}// 在 onclose 中添加重连逻辑
socket.onclose = function() {console.log('WebSocket connection closed. Attempting to reconnect...');reconnect();
};
三、总结

通过心跳检测机制,JavaScript WebSocket 应用能够保持连接的稳定性和可靠性。通过定期发送心跳包并检测服务器的响应,可以及时发现并解决连接问题,确保数据的实时传输。同时,通过实现断线重连机制,可以进一步提升用户体验和应用的健壮性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/52602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

序列化组件对比

1、msgpack介绍 1.MsgPack产生的数据更小,从而在数据传输过程中网络压力更小 2.MsgPack兼容性差,必须按照顺序保存字段 3.MsgPack是二进制序列化格式,兼容跨语言 官网地址: https://msgpack.org/ 官方介绍:Its lik…

一、undo log、Buffer Pool、WAL、redo log

目录 1、undo log2、Buffer Pool3、WAL4、redo log5、总结6、问题 1、undo log undo log日志是一种用于撤销回退的逻辑日志,在事务未提交前会记录相反的操作到undo log,当事务回滚,使用undo log 进行回滚,保证了事务的原子性。MV…

C++ TinyWebServer项目总结(8. 高性能服务器程序框架)

《Linux 高性能服务器编程》一书中,把这一章节作为全书的核心,同时作为后续章节的总览。这也意味着我们在经历了前置知识的学习后,正式进入了 Web 服务器项目的核心部分! 前置内容回顾: 1. C TinyWebServer项目总结&…

等保测评中的安全测试方法

等保测评,即信息安全等级保护测评,是我国网络安全领域的重要评估机制,用于验证网络系统或应用是否满足相应的安全保护等级要求。在等保测评中,安全测试方法扮演着至关重要的角色。本文将详细介绍等保测评中常用的安全测试方法及其…

LinkedHashMap和TreeMap的基本使用

一.LinkedHashMap集合:(是HashMap集合的儿子,Map集合的孙子) 1.特点: 2.代码实现: 1)键的唯一性: package com.itheima.a01myMap; ​ import java.util.LinkedHashMap; ​ public class A07_…

YOLOv8目标检测部署RK3588全过程,附代码pt->onnx->rknn,附【详细代码】

目录 一、训练yolov8模型,得到最佳权重文件best.pt 二、pt转onnx,即best.pt->best11.onnx 1、对下载的YOLOv8代码修改 2、加入模型导出功能, 3、导出指令采用如下代码 三、ONNX转RKNN 四、RK3588部署 1、拷贝rknn文件到rk3588板子内 2、执行…

48.x86游戏实战-封包抓取进图call

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

递归神经网络 (RNN) 简介

文章目录 一、介绍二、什么是递归神经网络 (RNN)?三、展开递归神经网络四、训练递归神经网络五、RNN 的类型六、现实生活中的 RNN 用例七、RNN 的两个主要限制八、RNN的变体8.1 双向递归神经网络 (BRNN)8.2 长短期记忆…

YOLOv8改进 | 融合改进 | C2f融合Faster-GELU模块提升检测速度【完整代码 + 主要代码解析】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效…

基于信号量和环形队列的生产者消费者模型

文章目录 POSIX信号量信号量接口初始化信号量销毁信号量等待信号量发布信号量 基于环形队列的生产者消费者模型单生产单消费多生产多消费 POSIX信号量 POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。 但POSIX可以…

接口返回结果封装

接口返回结果封装 1、错误信息枚举 package com.zhw.enums;public enum AppHttpCodeEnum {// 成功SUCCESS(200,"操作成功"),// 登录NEED_LOGIN(401,"需要登录后操作"),NO_OPERATOR_AUTH(403,"无权限操作"),SYSTEM_ERROR(500,"出现错误&quo…

K-medoids算法原理及Python实践

一、原理 K-medoids算法是一种聚类算法,它的原理与K-Means算法相似,但关键区别在于它使用数据集中的实际点(称为medoids)作为簇的中心点,而不是像K-Means那样使用簇内所有点的平均值。以下是K-medoids算法的主要原理&…

Excel 保持原序时计算组内排名

Excel某表格第1列是分组,第2列是日期,未排序。 AB1Agent IDDate of Sale2Agent107-12-20233Agent105-12-20234Agent209-12-20235Agent313-12-20236Agent214-12-20237Agent222-12-20238Agent115-12-20239Agent117-12-202310Agent213-12-202311Agent120-1…

wooyu漏洞库YYDS!!!入门之道:重现乌云漏洞库

目录 wooyun乌云漏洞库搭建 1、搭建资料 文件结构分析: ​编辑2、搭建过程 2.1、搭建wooyun网站 2.2、配置数据库 2.2.1、修改数据库配置文件conn.php 2.2.2、创建wooyun数据库,并解压数据库文件 2.2.3、连接数据库(数据库默认连接密…

计算机基础知识总结(八股文--计算机网络、操作系统、数据库、c++、数据结构与算法)

一、操作系统 0.内存管理 01.什么是虚拟内存?为什么需要虚拟内存? 虚拟内存为程序提供比实际物理内存更大的内存空间,同时提高内存管理的灵活性和系统的多任务处理能力。虚拟地址空间就是进程所能看到的内存空间,这段空间是连续…

【案例61】update driver error

问题现象 顾问在保存数据源时报“update driver error”错误,重启服务器,重启sysConfig.bat后问题依旧。 问题分析 之前碰到这类问题发现是权限的问题。所以先去检查了相关文件夹的权限。 查看控制台发现客户用的是非Administrator用户登录&#xff0…

数学建模2024国赛时间及事项安排

2024年的全国大学生数学建模竞赛即将拉开帷幕。考虑到许多同学可能是首次参与此类赛事,尚不清楚如何进行有效的时间安排,博主在此整理了以往参赛的经验和时间管理策略,希望能为大家提供一些有益的参考,更从容地应对国赛。 本届全国…

网络安全 DVWA通关指南 DVWA File Upload(文件上传)

DVWA File Upload(文件上传) 文章目录 DVWA File Upload(文件上传)修复建议 LowMediumHighImpossible 修复建议 1、使用白名单限制可以上传的文件扩展名 2、注意0x00截断攻击(PHP更新到最新版本) 3、对上传…

出口MID电能表到欧洲市场

出口MID电能表到欧洲市场! 浙江永泰隆电子有限公司在研发和将MID能量计出口到欧盟市场方面具有丰富的经验。以下是突显该公司专业性的概述: 公司概况: 浙江永泰隆电子有限公司是一家专注于先进能量测量解决方案的制造商,特别是…

【栈】| 力扣高频题: 有效的括号

🎗️ 主页:小夜时雨 🎗️专栏:算法题 🎗️如何活着,是我找寻的方向 目录 1. 题目解析2. 代码 1. 题目解析 题目链接: 力扣20:https://leetcode.cn/problems/valid-parentheses/description/ 本…