websocket 心跳机制

2023-10-26

WebSocket 是一种在客户端和服务器之间创建持久连接的技术。为了保持连接的稳定性,就需要通过发送心跳消息来维持 WebSocket 连接。

1、创建一个webscoket基本的使用

// 创建 WebSocket 对象,传入服务器地址
const socket = new WebSocket('ws://url');

// 监听 WebSocket 的打开事件
socket.addEventListener('open', (event) => {
  // 在此处理连接打开时的逻辑
});

// 监听 WebSocket 接收到消息的事件
socket.addEventListener('message', (event) => {
  // 在此处理从服务器接收到的消息的逻辑
});

// 监听 WebSocket 关闭事件
socket.addEventListener('close', (event) => {
  // 在此处理连接关闭时的逻辑
});

// 监听 WebSocket 发生错误的事件
socket.addEventListener('error', (event) => {
  // 在此处理连接发生错误时的逻辑
});

// 向服务器发送消息
socket.send('Hello, server!');

2、在客户端连接到 WebSocket 服务器之后,通过 setInterval 方法定时发送心跳消息

let ws = new WebSocket('ws://localhost:8080');
let heartCheck;

ws.onopen = function() {
  heartCheck = setInterval(function() {
    ws.send('HeartBeat');
  }, 5000);  // 发送心跳消息的时间间隔,单位毫秒
}

这边的代码会每隔5秒向服务器发送一个心跳信息

3、在客户端接收到服务器发送的消息时,清除心跳定时器。因为如果服务器一直有推送消息,那么就无需再发送心跳消息

let ws = new WebSocket('ws://url');
let heartCheck;

ws.onopen = function() {
  heartCheck = setInterval(function() {
    ws.send('HeartBeat');
  }, 5000);
}

ws.onmessage = function() {
  clearInterval(heartCheck);
  heartCheck = setInterval(function() {
    ws.send('HeartBeat');
  }, 5000);
}

在客户端接收到服务器发送的消息时,清除了原来的心跳定时器,并重新创建了一个心跳定时器,从而保证 WebSocket 的连接状态。

4、在客户端检测到 WebSocket 连接关闭时,清除心跳定时器。因为如果 WebSocket 连接关闭了,那么心跳定时器也就没有了意义

let ws = new WebSocket('ws://url');
let heartCheck;

ws.onopen = function() {
  heartCheck = setInterval(function() {
    ws.send('HeartBeat');
  }, 5000);
}

ws.onmessage = function() {
  clearInterval(heartCheck);
  heartCheck = setInterval(function() {
    ws.send('HeartBeat');
  }, 5000);
}

ws.onclose = function() {
  clearInterval(heartCheck);
}

当检测到 WebSocket 连接关闭时,清除了心跳定时器

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

websocket 心跳机制 的相关文章

  • 在 Apache 上设置 websocket?

    所以我正在对 websockets 进行一些研究 我有几个问题似乎找不到明确的答案 如何在 Linux 服务器上设置 Web 套接字 有 Apache 模块吗 我可以吗have使用第 3 方 PHP 代码或类似代码 除了浏览器兼容性之外 问
  • 如何通过 libwebsocket 发送异步数据?

    我正在将 Warmcat 的 libwebsocket C 库用于小型 Websocket 服务器 我已经启动并运行了这些示例 并且可以发送数据以响应从 websocket 接收数据 例如回显发送的反向字节 但是 我无法弄清楚如何在不使用
  • 如何终止 Websocket 连接?

    如何终止 Websocket 连接 我不是在谈论关闭两端的连接 而是在 中间 中断它 我需要测试重新连接时必须发生的一些应用程序逻辑 通过 SocketIO 处理 不 拔掉网络电缆不算数 因为我无法在单元测试中真正实现自动化 此外 我希望只
  • Websocket java 客户端 Spring + Stomp:传输错误:ConnectionLostException

    我正在尝试使用 Stomp 和 Sockjs 创建一个独立的 Java 应用程序作为今年 Spring 的 websocket 客户端 考虑到 spring 规范和 spring portafolio 示例 我收到此错误 15 18 01
  • 从 websocket 发送数据到 socket.io

    我使用 websocket 接口连接到 websocket 服务器 如果我想将通过 websocket 接口从 websocket 服务器接收到的数据发送到通过 http 服务器连接到我的客户端 我应该使用 socket io 吗 所以最后
  • 使用 HTML5 或 Javascript 的 P2P 视频会议

    我正在尝试使用 html5 和 javascript 构建视频会议 直到现在我能够流式传输我的相机捕获并将其显示在画布上 这是代码
  • Dispatcher-servlet 无法映射到 websocket 请求

    我正在开发一个以Spring为主要框架的Java web应用程序 特别使用Spring core Spring mvc Spring security Spring data Spring websocket 像这样在 Spring 上下文
  • 如何使用 POCO 发送 websocket PONG 响应

    我正在尝试使用 POCO 1 7 5 设置 websocket 服务器 POCO的样本发现here https github com pocoproject poco blob develop Net samples WebSocketSe
  • Symfony 2 GeniusesOfSymfony/WebSocketBundle

    我正在 symfony 2 应用程序中工作 我需要使用 websocket 我找到了一个名为 GeniusesOfSymfony WebSocketBundle 的包 并将其集成到系统中 该捆绑包基于 JDare ClankBundle 但
  • websockets 如何处理同一浏览器的两个选项卡

    I have 1 个 PHP 服务器 提供 http 请求 和 1 node js 发布更新的数据消息 每个连接都带有 websocket php 服务器设置其 cookie 在一个浏览器中 此 cookie 可在所有选项卡中使用 当浏览器
  • 开放式 WebSocket 连接存在哪些安全问题?

    我正在构建一个使用 websockets 的应用程序 我只允许经过身份验证的用户在登录并被授予会话 ID 后打开与服务器的 Websocket 连接 一旦我与经过身份验证的用户打开了 Websocket 连接 当前 页面 就会保存打开的 W
  • 流媒体性能 - Canvas 与

    我正在开发一个应用程序 需要通过 webSocket 连接以每秒至少 30 帧的速度持续传输图像 我遇到了一些性能问题 并希望尽我所能进行优化 我想知道使用不断更新的图像之间的性能差异是什么 就像这样 img src someDynamic
  • 无法使用 javascript 建立与安全 Websocket 服务器的连接

    我的开发环境是这样的 操作系统 微软Windows 10 PHP 框架 Laravel 8 0 PHP 版本 7 4 Websocket 服务器 cboden ratchet 0 4 3 WAMP 服务器 3 2 0 Apache 2 4
  • 在龙卷风 v4+ 下,WebSocket 连接被拒绝并显示 403

    我有一个旧的龙卷风服务器 可以处理普通的 WebSocket 连接 我通过 Nginx 将这些连接从 wss info mydomain com 代理到 wss mydomain com 8080 以便绕过阻止非标准端口的客户代理 最近升级
  • 可以模拟多个并发连接来测试 Nodejs 应用程序

    我有一个简单的node js socket io websockets 应用程序运行 localhost 我想看看它可以处理多少并发连接 是否可以在本地主机本身上模拟多个并发用户 这是我使用 socket io client 的半生尝试 f
  • AWS应用程序负载均衡器和socket.io

    我有一个正在运行的 socket io 聊天室 当我们在一台机器上运行时 其流量越来越大 我们已经使用 ws 套接字库运行了基准测试 它们的性能确实要好得多 这将更好地利用我们的硬件 但这会以必须重写我们的应用程序为代价 我们的 socke
  • Kubernetes 集群中的 Websocket 连接与 nginx-ingress

    我正在尝试在 Kubernetes 集群中运行的服务器上建立一个简单的 Websocket 连接 Websocket 连接能够在我的本地测试计算机上建立 但在使用 nginx ingress 部署到 GKE 后 我无法将客户端连接到服务器
  • C 代码中的握手 WebSocket

    我是 html5 及其 websocket 的新手 现在我一直在尝试用 c 制作自己的 websocket 服务器但是 这对我来说很难 我只想从 C 服务器发送 hello world 到 html 客户端 但是 我在握手方面遇到了麻烦 o
  • JavaScript WebSocket.send 方法会阻塞吗?

    如果我要发送大量Blob or ArrayBuffer通过 JavaScriptWebSocket通过其send方法 是否send方法调用会阻塞 直到发送数据为止 还是会复制数据以异步发送 以便调用可以立即返回 一个相关的 未回答的 问题是
  • 通过浏览器关闭页面时出现 Websocket 错误:“已建立的连接被主机中的软件中止”

    我开发了一个实时通知系统Spring 4 代码可以在 Github 上找到 github com vdenotaris Spring Messaging https github com vdenotaris Spring Messagin

随机推荐

  • 达芬奇无法播放视频,黑屏,不能预览画面

    说一下其中一个原因 是因为用了像是xdisplay super display这类软件 他们会安装一个显卡驱动而这个驱动就会导致这个问题 方法很简单 在设备管理器里面 显示卡一览 卸载掉除了你的电脑显卡以外的虚拟显卡驱动
  • element ui 中table表格刷新、input输入框添加enter触发搜索、连续点击的处理办法

    8 25小结 1 table表格刷新 elementy ui有一个v loading 我们可以给它绑定一个布尔值 truer就是转圈圈 false就是停止转圈圈 在刷新按钮上绑定一个事件来控制这个布尔值的改变 但是需要加一个定时器才能看出来
  • spring-boot-maven-plugin爆红解决方案,亲测有效

    报错信息提示如下 Plugin org springframework boot spring boot maven plugin not found 我使用idea中的spring initialer 来创建的 maven项目 但是在下载
  • 揭秘——STL空间配置器

    为什么要有空间配置器呢 这主要是从两个方面来考虑的 1 小块内存带来的内存碎片问题 单从分配的角度来看 由于频繁分配 释放小块内存容易在堆中造成外碎片 极端情况下就是堆中空闲的内存总量满足一个请求 但是这些空闲的块都不连续 导致任何一个单独
  • java中常见的异常类型

    Throwable 类是 Java 语言中所有错误或异常的超类 只有当对象是此类 或其子类之一 的实例时 才能通过 Java 虚拟机或者 Java throw 语句抛出 类似地 只有此类或其子类之一才可以是 catch 子句中的参数类型 两
  • 基于MATLAB的多聚类相位展开算法实现

    基于MATLAB的多聚类相位展开算法实现 相位展开是一种常见的信号处理算法 用于从相位差模糊的信号中恢复出准确的相位信息 多聚类相位展开算法是相位展开的一种改进方法 能够有效处理多个相位聚类的情况 本文将介绍如何使用MATLAB实现多聚类相
  • 【转载】Parameter must be a descendant of this view问题的解决方案

    转载 原文链接为 http www cnblogs com monodin p 3675040 html 关于ViewFlow和GridView嵌套导致Parameter must be a descendant ofthis view问题
  • arcgis图不见了_arcgis的左边图层边栏不见了怎么弄出来

    1 要加载使用 空间分析模块 首先得在ArcMap中执行菜单命令 在扩展模块管理窗口中 将 空间分析 spatial analyst 前的检查框打勾 然后 在ArcMap 工具栏的空白区域点右键 在出现的右键菜单中找到 空间分析 spati
  • maven springmvc hibernate shiro 集成

    最近项目需要进行高要求的Web权限管理 在比较Spring security和Shiro之后由于Shiro更大的灵活度和更强的配置性选择了Shiro 不过官方的文档写的对于集成spring不太清楚 尤其是Realm怎样实现 因此 在查阅一系
  • pandas安装完成后,报错:ImportError

    安装完pandas后 在使用时 发现需要更新numpy 系统自带的版本是1 12 1 执行 pip install U numpy 安装成功 Traceback most recent call last File D Anaconda3
  • vue3 实现点击可左右滑动

    具体代码如下
  • WINDOWS的远程桌面。

    http baike baidu com view 372045 htm 1 远程桌面的功能 远程桌面连接组件是从Windows 2000 Server开始由微软公司提供的 在WINDOWS 2000 SERVER中他不是默认安装的 该组件
  • Flutter 页面跳转和数据传值 pop回指定页面(路由实践)

    flutter搭建app 感觉相对简化了很多 布局核心就是万事皆widget 在之前我们不管是iOS 安卓原生 还是rn 我们在页面跳转和回转 我们都要对页面进行管理 从iOS 到安卓 到rn 路由被强调话了 web前端的一些重要设计思想被
  • .NET6用起来-Autofac

    本文的主角是Autofac 它是一款非常奈斯的依赖注入框架 暂时先不讨论 先分享几个名词 DI 依赖注入 IOC 控制反转 IOC容器 通过Demo 认识这些名词 Demo很简单 创建一个Asp NET Core项目 新增一个用户服务类 U
  • matplotlib中的3D绘图警告解决:MatplotlibDeprecationWarning: Axes3D(fig) adding itself to the figure

    在用matplotlib绘图中 ax Axes3D fig 我们得到了下面的警告 MatplotlibDeprecationWarning Axes3D fig adding itself to the figure is deprecat
  • 物联网安全技术提高区块链应用数据的可信度

    简介 物联网设备可信上链 物联网设备可信上链 为物联网设备上链提供可信的 一站式 多层级的安全服务 与阿里云BaaS等企业级区块链服务无缝对接 相关产品了解TEE 安全能力 密钥全生命周期管理和安全计算 支持企业级区块链 HyperLedg
  • AWB常见面试问题

    1 有没有处理过生产线问题 如何处理的 2 AWB客观和主观的整体调试流程 常用的机制有哪些 3 色差不过该如何解决 4 处理过那些严重偏色问题 解决思路是什么 5 如何根据偏色问题定位需要调试的模块 6 简述一下AWB的算法流程 7 SA
  • display aspect ratio和遥控器上的调整

    刚刚通过实验新鲜总结出来的 科普一下 一张DVD电影碟片 其解码出来的视频画面大小总是固定的 比如NTSC的DVD 总是720x480 其实不一定 但可以姑且这么认为 显示比例为4 3 不过 值得注意的是 现代的DVD Player和电视机
  • C++模板

    模板定义 函数模板 template
  • websocket 心跳机制

    WebSocket 是一种在客户端和服务器之间创建持久连接的技术 为了保持连接的稳定性 就需要通过发送心跳消息来维持 WebSocket 连接 1 创建一个webscoket基本的使用 创建 WebSocket 对象 传入服务器地址 con