node.js-WebScoket心跳机制(服务器定时发送数据,检测连接状态,重连)

1.WebScoket心跳机制是?

        基于上一篇文章,WebScoket在浏览器和服务器间完成一次握手,两者间创建持久性连接,并进行双向数据连接。node.js-node.js作为服务器,前端使用WebSocket(单个TCP连接上进行全双工通讯的协议)-CSDN博客文章浏览阅读645次,点赞17次,收藏11次。node.js作为服务器,前端使用WebSocket(单个TCP连接上进行全双工通讯的协议) https://blog.csdn.net/2301_76671906/article/details/146199752?fromshare=blogdetail&sharetype=blogdetail&sharerId=146199752&sharerefer=PC&sharesource=2301_76671906&sharefrom=from_link        心跳机制简单的来说,就是(1)客户端向服务器利用定时(setInterval)发送消息(心跳包)。(2)前端监听WebScoket的关闭连接(onclose()事件)时重新创建连接。

  •         客户端定时向服务器发送心跳数据包,保持持久性连接。
  •         服务器定时向客户端发送心跳数据包,检测客户端连接是否正常。

2.WebScoket心跳机制的必要性?

        必要的,心跳机制通过检测服务器与客户端连接状态,处理连接失败后重连或其他的异常情况。

3.WebScoket心跳机制的缺点?

  •         不断地定时发送心跳数据包,会消耗服务器的资源。
  •         检测到连接失败后,重新连接会导致部分的数据丢失。

4.例子

<!DOCTYPE html>
<html>
<head><title>WebSocket测试</title><script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
</head>
<body><div id="app"><input v-model="inputMessage" @input="sendMessage" placeholder="输入消息"><p>收到的消息: {{ receivedMessage }}</p></div><script>// 创建WebSocket实例,连接到本地的8080端口const ws = new WebSocket('ws://localhost:8080');const app = new Vue({el: '#app',data: {inputMessage: '',receivedMessage: ''},methods: {sendMessage() {// 如果WebSocket连接已打开if (ws.readyState === WebSocket.OPEN) {// 发送输入框中的内容ws.send(this.inputMessage);}}}});// 当WebSocket连接成功时触发ws.onopen = function() {console.log('已连接到服务器');// 1.连接成功后开始心跳startHeartbeat();};// 2.当收到服务器发送的消息时触发ws.onmessage = function(event) {console.log('收到消息: ' + event.data);// 更新Vue实例中的receivedMessage变量app.receivedMessage = event.data;//重置心跳计时器resetHeartbeat();};// 3.当WebSocket连接关闭时触发ws.onclose = function() {console.log('连接已关闭');// 停止心跳计时器stopHeartbeat();// 添加重新连接逻辑};// 4.心跳相关发送心跳消息和重置心跳计时器let heartbeatIntervalId;const heartbeatInterval = 30000; // 心跳间隔,单位为毫秒function startHeartbeat() {heartbeatIntervalId = setInterval(() => {if (ws.readyState === WebSocket.OPEN) {ws.send('heartbeat'); // 发送心跳消息console.log('发送心跳消息');} else {stopHeartbeat(); // 如果连接关闭,停止心跳}}, heartbeatInterval);}// 心跳重置定时器function resetHeartbeat() {clearInterval(heartbeatIntervalId); // 清除心跳计时器startHeartbeat(); // 重新开始心跳计时器}// 停止心跳计时器 function stopHeartbeat() {clearInterval(heartbeatIntervalId); }</script>
</body>
</html>

node.js作为服务器进行对应的接受相关的代码在上一篇文章。

主要实现思路:

  •         WebScoket连接成功时开启心跳
  •         当服务器发送消息时,重置心跳,开启心跳
  •         监听连接关闭时,停止心跳
  •         重连服务器未涉及,待学习

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

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

相关文章

若依RuoYi-Cloud-Plus微服务版(完整版)前后端部署

一.目标 在浏览器上成功登录进入 二.源码下载 后端源码&#xff1a;前往Gitee下载页面(https://gitee.com/dromara/RuoYi-Cloud-Plus)下载解压到工作目录。 前端源码&#xff1a; 前往Gitee下载页面(https://gitee.com/JavaLionLi/plus-ui)下载解压到工作目录。 文档地址&a…

Nginx 多协议代理功能(Nginx Multi Protocol Proxy Function)

前言 Nginx 作为高性能的反向代理和负载均衡工具&#xff0c;广泛应用于 HTTP 和 HTTPS 协议的代理。但你知道吗&#xff1f;Nginx 还可以代理其他协议&#xff0c;比如 TCP 和 UDP&#xff01;这些功能让它在多协议支持方面表现出色&#xff0c;可以用于数据库代理、流媒体服…

MistralAI挑战DeepSeek:开源模型能否颠覆行业巨头

在2025年&#xff0c;世界移动通信大会的展台上&#xff0c;MistralAI的创始人ArthurMensch对着镜头&#xff0c;露出了温和的笑容。不过他随后讲出的话&#xff0c;就仿佛一颗重磅炸弹&#xff0c;在AI领域引发了巨大的动荡——他们即将推出的开源模型&#xff0c;据传能够超越…

代码随想录第五十二天| 101.孤岛的总面积 102.沉没孤岛 103.水流问题 104.建造最大岛屿

孤岛的总面积 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域&#xff0c;且完全被水域单元格包围。孤岛是那些位于矩阵内部、所有单元格都不接触边缘的岛…

八叉树地图的原理与实现

八叉树与体素图 八叉树地图 八叉树地图是可变分辨率的三维栅格地图&#xff0c;可以自由调整分辨率&#xff0c;如下所示&#xff1a; 根据点云的数量或密度决定每个叶子方块是否被占据 体素图 体素就是固定分辨率的三维栅格地图&#xff0c;如下所示&#xff1a; 根据点云…

最节省服务器,手搓电子证书查询系统

用户预算150元&#xff0c;想要一个最简单证书查询系统。前台能查询证书、后台管理员能登录能修改密码&#xff0c;证书能够手动输入修改删除、批量导入导出删除数据、查询搜索。能够兼容苹果、安卓、PC三端浏览器&#xff0c;最后帮忙部署到云服务器上。 用户预算不多&#xf…

什么是全栈?

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点下班 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 &#x1f4c3;文章前言 &#x1f537;文章均为学习工…

作物移栽机器人的结构设计的介绍

作物移栽机器人的结构设计是一个复杂的机械与电子结合的系统工程&#xff0c;单纯用代码来实现整个结构设计是不现实的&#xff0c;因为结构设计更多涉及到机械结构、硬件选型等物理层面的内容。不过&#xff0c;我们可以通过代码来模拟作物移栽机器人的部分功能&#xff0c;例…

【文献阅读】SPRec:用自我博弈打破大语言模型推荐的“同质化”困境

&#x1f4dc;研究背景 在如今的信息洪流中&#xff0c;推荐系统已经成为了我们生活中的“贴心小助手”&#xff0c;无论是看电影、听音乐还是购物&#xff0c;推荐系统都在努力为我们提供个性化的内容。但这些看似贴心的推荐背后&#xff0c;其实隐藏着一个严重的问题——同质…

使用1Panel一键搭建WordPress网站的详细教程(全)

嘿&#xff0c;各位想搭建自己网站的朋友们&#xff01;今天我要跟大家分享我用1Panel搭建WordPress网站的全过程。说实话&#xff0c;我之前对服务器运维一窍不通&#xff0c;但通过这次尝试&#xff0c;我发现原来建站可以这么简单&#xff01;下面是我的亲身经历和一些小技巧…

本地fake server,

C# 制作的系统级tcp 重定向&#xff0c;整个系统只要有访问指定url&#xff0c;返回自定义内容到访问端。不局限在浏览器单一方面。 再者请理解这个图的含金量&#xff0c;服务器down机都可以模拟。 用途那就太多了&#xff0c;当然很多用途都不正当。嘿嘿 如果你很想要源代…

设计模式之美

UML建模 统一建模语言&#xff08;UML&#xff09;是用来设计软件的可视化建模语言。它的语言特点是简单 统一 图形化 能表达软件设计中的动态与静态信息。 UML的分类 动态结构图&#xff1a; 类图 对象图 组件图 部署图 动态行为图&#xff1a; 状态图 活动图 时序图 协作…

【openGauss】物理备份恢复

文章目录 1. gs_backup&#xff08;1&#xff09;备份&#xff08;2&#xff09;恢复&#xff08;3&#xff09;手动恢复的办法 2. gs_basebackup&#xff08;1&#xff09;备份&#xff08;2&#xff09;恢复① 伪造数据目录丢失② 恢复 3. gs_probackup&#xff08;1&#xf…

一文了解JVM的垃圾回收

Java堆内存结构 java堆内存是垃圾回收器管理的主要区域&#xff0c;也被称为GC堆。 为了方便垃圾回收&#xff0c;堆内存被分为新生代、老年代和永久代。 新创建的对象的内存会在新生代中分配&#xff0c;达到一定存活时长后会移入老年代&#xff0c;而永久代存储的是类的元数…

SQL子查询与MyBatis映射

文章目录 前言1. 数据库表结构2. MyBatis Mapper XML3. Java 实体类4. 技术点解析5. 执行效果6. 优化建议 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 以下是一个结合 SQL 别名、子查询、MyBatis 字段映射和代码复用的完整案例&#xff0c;以用户管…

基于SpringBoot的“校园周边美食探索及分享平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“校园周边美食探索及分享平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 校园周边美食探索及分享平台结构图…

时间复杂度(Time Complexity)

时间复杂度 1. 什么是时间复杂度&#xff1f; 时间复杂度&#xff08;Time Complexity&#xff09;是计算算法执行时间随输入规模&#xff08;n&#xff09;增长的变化趋势。它衡量算法的效率&#xff0c;通常使用大 O 记号&#xff08;Big-O notation&#xff09;表示&#…

树莓派:更新源

发行版本 Debian 一直维护着至少三个发行版本&#xff1a;“稳定版&#xff08;stable&#xff09;”&#xff0c;“测试版&#xff08;testing&#xff09;”和“不稳定版&#xff08;unstable&#xff09;”。 发行版目录 下一代 Debian 正式发行版的代号为 bullseye — 发布…

K8s 1.27.1 实战系列(八)Service

一、Service介绍 1、Service 的作用与核心功能 Service 是 Kubernetes 中用于抽象一组 Pod 并提供稳定访问入口的资源。它解决了以下问题: ​Pod IP 不固定:Pod 可能因故障、扩缩容或更新导致 IP 变化,Service 通过 ClusterIP(虚拟 IP)提供固定访问地址。​负载均衡:自动…

RocketMQ性能优化篇

在分布式消息系统中&#xff0c;RocketMQ以其高性能、高可靠性和高可扩展性而被广泛应用。然而&#xff0c;为了充分发挥其性能优势&#xff0c;需要进行一系列的性能测试和优化。本文将从性能测试方法和优化实践两个方面&#xff0c;详细介绍如何对RocketMQ进行性能优化。通过…