WebSocket心跳检测与断线重连示例

WebSocket通过心跳检测与断线重连机制提升连接稳定性,客户端每30秒发送ping,服务端回应pong,超时未响应则判定断线;onclose触发后按指数退避策略重试连接,最多5次,确保网络波动后可靠恢复。

websocket心跳检测与断线重连示例

WebSocket在长时间通信中容易因网络波动或服务端超时导致连接中断。为了确保连接稳定,通常需要实现心跳检测与断线重连机制。下面介绍一种简单有效的实现方式。

心跳检测机制

心跳检测通过定时发送消息确认连接是否正常。客户端和服务端约定一个心跳消息格式,定期互发ping/pong消息。

关键点:

设置定时器,每隔一定时间(如30秒)向服务端发送ping消息服务端收到ping后应答pong客户端记录最后一次收到pong的时间,超时未响应则判定为断线

// 示例:客户端心跳逻辑

let ws;let heartCheck = {  timeout: 30000,  timer: null,  reset: function() {    clearTimeout(this.timer);    return this;  },  start: function() {    this.timer = setInterval(() => {      ws.send('ping');    }, this.timeout);  }};

function connect() {ws = new WebSocket('ws://localhost:8080');

ws.onopen = () => {heartCheck.reset().start();};

ws.onmessage = (e) => {if (e.data === 'pong') {heartCheck.reset().start(); // 收到pong,重启心跳}};}

断线重连机制

当连接关闭或心跳超时,自动尝试重新连接,避免频繁重试可设置最大重连次数和间隔时间。

实现要点:

监听onclose事件触发重连设置重连次数限制,防止无限重试使用指数退避策略增加重连间隔

// 示例:断线重连逻辑

let reconnectInterval = 1000;let maxReconnectAttempts = 5;let reconnectAttempts = 0;

ws.onclose = () => {if (reconnectAttempts {reconnectAttempts++;connect();console.log(第 ${reconnectAttempts} 次重连尝试);}, reconnectInterval * Math.pow(2, reconnectAttempts));} else {console.warn('重连次数已达上限');}};

完整示例整合

将心跳与重连结合,形成健壮的WebSocket连接管理。

let ws;let heartCheck = {  timeout: 30000,  timer: null,  reset: function() {    clearTimeout(this.timer);    return this;  },  start: function() {    this.timer = setInterval(() => {      if (ws.readyState === WebSocket.OPEN) {        ws.send('ping');      }    }, this.timeout);  }};

let reconnectInterval = 1000;let maxReconnectAttempts = 5;let reconnectAttempts = 0;

function connect() {ws = new WebSocket('ws://localhost:8080');

ws.onopen = () => {reconnectAttempts = 0; // 成功连接,重置重连计数heartCheck.reset().start();};

ws.onmessage = (e) => {if (e.data === 'pong') {heartCheck.reset().start();} else {// 处理正常业务消息console.log('收到消息:', e.data);}};

ws.onclose = () => {heartCheck.reset(); // 清除心跳定时器if (reconnectAttempts {reconnectAttempts++;connect();}, reconnectInterval * Math.pow(2, reconnectAttempts));}};

ws.onerror = () => {console.error('WebSocket错误');};}

// 初始化连接connect();

基本上就这些。心跳加重连能显著提升WebSocket的稳定性,实际项目中可根据需求调整超时时间和重试策略。

以上就是WebSocket心跳检测与断线重连示例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1409126.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Golang函数中使用指针修改外部变量实例
上一篇 2026年5月10日 11:21:47
使用C++编写,找到N叉树中给定节点的兄弟节点数量
下一篇 2026年5月10日 11:21:47

相关推荐

  • WebSocket消息队列处理性能优化

    优化WebSocket性能需解耦通信与业务逻辑,通过消息队列异步处理、二进制序列化、数据压缩、批量发送及动态心跳机制,提升吞吐量并降低延迟。 处理WebSocket消息时,性能瓶颈常出现在消息的接收、处理和分发环节。优化核心在于解耦通信与业务逻辑,并高效管理消息流。 引入消息队列进行异步解耦 直接在…

    2026年5月10日
    000
  • 实时加密深度分析平台盘点?3款开源数据源

    CryptoWatch开源接口提供高频更新的全球交易所深度数据,支持多语言调用与可视化渲染;2. TradingView开源脚本集成Pine Script模板,可自定义订单簿深度分析并设置买卖压力警报;3. OpenBB Terminal支持本地部署,结合命令行拉取加密资产深度数据,实现技术指标叠加…

    2026年5月10日
    000
  • 怎样使用 JavaScript 的 Typed Arrays 处理二进制数据?

    Typed Arrays通过ArrayBuffer实现对二进制数据的高效操作,需用视图如Int32Array或DataView访问,支持多种数据类型和字节序控制,适用于处理图像、音频等原始数据。 JavaScript 的 Typed Arrays 提供了一种高效处理二进制数据的方式,特别适用于操作原…

    2026年5月10日
    100
  • 怎样使用javascriptArrayBuffer_二进制数据如何操作?

    ArrayBuffer 是 JavaScript 中操作二进制数据的基础内存容器,需配合 Uint8Array、Int32Array 或 DataView 等视图使用;其长度固定,创建后不可变,常用于文件读取、网络请求、Canvas 像素处理及 WebAssembly 等场景。 JavaScript…

    2026年5月10日
    000
  • 无数据库实现简易多人协作应用:可行性与技术方案

    本文探讨了在没有传统后端数据库的情况下,实现一个简单的多人协作列表应用的可行性。针对少量用户、小数据量的场景,介绍了利用浏览器本地存储和实时通信技术(如WebSocket或Firebase Realtime Database)实现数据同步和更新的方法,并分析了其优缺点和适用场景。 在某些特定场景下,…

    2026年5月10日
    000
  • html5能否插入带表单的文档_html5表单文档嵌入与数据提交【步骤】

    HTML5中无法直接嵌入外部带表单的HTML文档并原生提交;可行方案有四:一、用iframe嵌入,需同源或CORS支持,并用postMessage通信;二、用fetch+DOMParser动态加载表单片段并手动绑定事件;三、在当前页面直接编写表单,最规范且兼容性好;四、用JavaScript+fet…

    2025年12月23日
    700
  • html5如何推送数据_html5数据推送实现方法【接口实现】

    HTML5提供四种实时数据推送机制:一、SSE实现单向服务器推送;二、WebSocket支持双向低延迟通信;三、轮询模拟推送兼容旧环境;四、Broadcast Channel实现同源页面间广播。 如果您的Web应用需要实时接收服务器端发送的数据,HTML5提供了多种原生机制来实现数据推送。以下是几种…

    2025年12月23日
    000
  • 如何开发html5_HTML5应用开发入门指南【入门】

    HTML5应用开发入门需按五步进行:一、搭建标准文档结构,含DOCTYPE声明、html根元素及meta标签;二、使用header、nav、main等语义化标签组织内容;三、嵌入video、audio、canvas并绑定交互事件;四、通过Service Worker实现离线缓存;五、用特性检测替代U…

    2025年12月23日
    000
  • html5如何转换数据_html5数据转换方法详解【数据处理】

    HTML5中数据转换主要通过五种方法:一、JavaScript内置方法(parseInt、parseFloat、+运算符)转换字符串与数字;二、JSON.stringify/parse实现结构化数据序列化;三、DataView和TypedArray处理二进制数据;四、表单valueAsNumber/…

    2025年12月23日
    000
  • 设置使用html5模式_文档类型声明与特性检测【技巧】

    需声明并用Modernizr、原生JS或@supports检测特性。一、首行写;二、引入Modernizr检测HTML5/CSS3特性;三、手动检测localStorage、Canvas、Fetch;四、用@supports做CSS特性判断。 如果您在编写网页时希望确保浏览器以最新的HTML5标准解…

    2025年12月23日
    000
  • Flask 应用中实现动态图片显示与定时刷新:从基础到文件上传

    Flask 应用中实现动态图片显示与定时刷新:从基础到文件上传Flask 应用中实现动态图片显示与定时刷新:从基础到文件上传Flask 应用中实现动态图片显示与定时刷新:从基础到文件上传Flask 应用中实现动态图片显示与定时刷新:从基础到文件上传

    本教程将指导您如何在flask应用中高效地显示和管理图片,特别关注于如何利用javascript实现图片内容的定时刷新,以及如何通过服务器端文件上传机制来更新图片。文章涵盖flask静态文件服务、客户端刷新策略、文件上传处理及相关最佳实践,旨在提供一个完整的动态图片解决方案。 在现代Web应用中,动…

    2025年12月23日 用户投稿
    600
  • 网站内嵌消息系统实现指南:利用表单服务简化用户通信

    本教程探讨了在网站中集成简易消息系统的可行方案,特别针对小规模用户群体的站内通信需求。鉴于直接嵌入完整电子邮件客户端的复杂性与局限性,文章推荐采用基于表单提交的第三方服务(如Formspree)实现用户与管理员之间的邮件通知。该方法无需复杂的后端开发,即可快速搭建起高效、安全的站内信息传递渠道。 引…

    2025年12月23日
    000
  • python五子棋的html怎么运行_运行python五子棋html文件方法【教程】

    首先确认五子棋HTML文件是否包含完整前端逻辑,检查文件结构及外部资源引用;若仅为静态页面则无法运行交互功能。其次尝试双击直接打开HTML文件,若显示空白则通过浏览器开发者工具查看报错。对于依赖同源策略的资源,需使用Python启动本地服务器,在终端执行python -m http.server 8…

    2025年12月23日
    000
  • 在Flask应用中利用JavaScript实现动态图片更新教程

    在Flask应用中利用JavaScript实现动态图片更新教程在Flask应用中利用JavaScript实现动态图片更新教程在Flask应用中利用JavaScript实现动态图片更新教程在Flask应用中利用JavaScript实现动态图片更新教程

    本教程详细介绍了如何在python flask web应用中实现图片的周期性自动更新。我们将学习如何使用javascript在客户端定时刷新图片,并探讨flask后端如何配合处理图片文件,确保前端能够获取到最新的图像内容,即使文件名保持不变。 引言:动态图片更新的需求 在现代Web应用开发中,许多场…

    2025年12月23日 用户投稿
    000
  • 在React应用中实施内容安全策略(CSP)及处理内联样式与脚本冲突

    本教程旨在指导开发者如何在react应用中有效实施内容安全策略(csp),特别针对`create-react-app`等构建工具可能产生的内联样式和脚本与csp指令冲突的问题。文章将详细阐述csp的基本原理,分析常见冲突原因,并提供包括使用哈希、nonce以及重构代码等多种解决方案,以确保应用安全且…

    2025年12月23日
    100
  • Opera DevTools热重载,HTML改CSS页面瞬变!

    Opera DevTools 热重载功能可在保存 HTML 或 CSS 文件时实时更新页面样式,提升开发效率。首先需在 DevTools 设置中启用“自动重载”,随后通过本地服务器(如 npx http-server)运行项目以支持文件监听。配合 VS Code 等编辑器的 Live Server …

    2025年12月23日
    000
  • 如何将Python后端逻辑与Django和HTML进行集成

    本教程旨在指导初学者如何将独立的Python命令行应用程序转换为基于Django的Web应用。文章将详细阐述如何通过Django的视图、URL配置和表单系统,将Python逻辑与HTML前端进行交互,实现用户输入捕获和结果展示。重点在于重构Python代码以适应Web环境,并利用Django For…

    2025年12月23日
    000
  • JavaScript中如何通过按钮控制函数内循环的启停

    本文详细阐述了在JavaScript中,如何利用控制标志和递归`setTimeout`模式,实现通过按钮精确控制函数内部循环的启动与停止,尤其适用于需要延迟执行的场景。通过清晰的代码示例和专业讲解,帮助开发者掌握响应式循环控制的实现方法。 在前端开发中,我们经常会遇到需要在后台执行一系列重复操作,并…

    2025年12月23日
    000
  • 将独立的Python逻辑集成到Django Web应用:构建一个交互式计时器

    本教程详细介绍了如何将独立的Python命令行应用程序(如计时器)迁移并集成到Django Web框架中。文章将指导读者理解从命令行交互到Web界面交互的转变,重点讲解如何利用Django的视图、模板和表单功能来接收用户输入、处理后端逻辑,并最终在Web环境中展示结果。同时,也将探讨在Web应用中处…

    2025年12月23日
    000
  • 实现实时UI更新:利用SSE与WebSocket告别传统轮询

    本文探讨了如何在不依赖传统http轮询的情况下,实现用户界面(ui)的实时动态更新,尤其适用于聊天应用中的用户活动状态显示。文章详细介绍了两种主流技术:服务器发送事件(sse)和websocket,并阐明了它们的工作原理、适用场景及选择依据。通过采用这些技术,服务器能够主动向客户端推送数据,从而避免…

    用户投稿 2025年12月23日
    300

发表回复

登录后才能评论
关注微信