当前位置: 首页 > news >正文

WebSocket心跳机制(笔记大全)

一、WebSocket心跳机制前端

前端实现WebSocket心跳机制的方式主要有两种:

  1. 使用setInterval定时发送心跳包。
  2. 在前端监听到WebSocket的onclose()事件时,重新创建WebSocket连接。

第一种方式会对服务器造成很大的压力,因为即使WebSocket连接正常,也要定时发送心跳包,从而消耗服务器资源。第二种方式虽然减轻了服务器的负担,但是在重连时可能会丢失一些数据。

二、WebSocket心跳包机制

WebSocket心跳包是WebSocket协议的保活机制,用于维持长连接。有效的心跳包可以防止长时间不通讯时,WebSocket自动断开连接。

心跳包是指在一定时间间隔内,WebSocket发送的空数据包。常见的WebSocket心跳包机制如下:

  1. 客户端定时向服务器发送心跳数据包,以保持长连接。
  2. 服务器定时向客户端发送心跳数据包,以检测客户端连接是否正常。
  3. 双向发送心跳数据包。

三、WebSocket心跳机制原理

WebSocket心跳机制的原理是利用心跳包及时发送和接收数据,保证WebSocket长连接不被断开。WebSocket心跳机制的原理可以用下面的流程来说明:

  1. 客户端建立WebSocket连接。
  2. 客户端向服务器发送心跳数据包,服务器接收并返回一个表示接收到心跳数据包的响应。
  3. 当服务器没有及时接收到客户端发送的心跳数据包时,服务器会发送一个关闭连接的请求。
  4. 服务器定时向客户端发送心跳数据包,客户端接收并返回一个表示接收到心跳数据包的响应。
  5. 当客户端没有及时接收到服务器发送的心跳数据包时,客户端会重新连接WebSocket。

四、WebSocket心跳机制必要吗

WebSocket心跳机制是必要的,它可以使WebSocket连接保持长连接,避免断开连接的情况发生。同时,心跳机制也可以检查WebSocket连接的状态,及时处理异常情况。

五、WebSocket心跳机制作用

WebSocket心跳机制的作用主要有以下几点:

  1. 保持WebSocket连接不被断开。
  2. 检测WebSocket连接状态,及时处理异常情况。
  3. 减少WebSocket连接及服务器资源的消耗。

六、WebSocket需要心跳吗

WebSocket需要心跳,因为WebSocket连接可能会因为长时间没有数据传输而被断开,而心跳机制可以及时检测连接状态,保持WebSocket长连接。

七、Spring WebSocket心跳机制

Spring WebSocket提供了心跳机制的相关配置,可以通过以下两种方式实现:

  1. 使用PingMessage和PongMessage类的方式实现WebSocket心跳机制。
  2. 通过配置HeartbeatHandler来实现WebSocket心跳机制。

使用PingMessage和PongMessage类的方式实现WebSocket心跳机制较为简单,只需要在发送PingMessage时设置检测时间间隔即可。配置HeartbeatHandler相对更加灵活,可以自定义检测时间间隔和检测内容。

八、WebSocket重连机制

WebSocket在发送和接收数据时,可能会因为网络原因、服务器宕机等因素而断开连接,此时需要使用WebSocket重连机制进行重新连接。

WebSocket重连机制可以通过以下几种方式实现:

  1. 前端监听WebSocket的onclose()事件,重新创建WebSocket连接。
  2. 使用WebSocket插件或库,例如Sockjs、Stompjs等。
  3. 使用心跳机制检测WebSocket连接状态,自动重连。
  4. 使用断线重连插件或库,例如ReconnectingWebSocket等。

九、WebSocket的缺点和不足

WebSocket的缺点和不足主要有以下几点:

  1. WebSocket需要浏览器和服务器端都支持该协议。
  2. WebSocket会增加服务器的负担,不适合大规模连接的应用场景。
  3. WebSocket不能像HTTP那样传输文本和二进制数据。

十、WebSocket心跳重连代码示例

下面是WebSocket心跳重连代码示例:

//创建WebSocket连接
var ws = new WebSocket("ws://localhost:8080/");//心跳包内容
var heartBeat = {type: "ping",timestamp: new Date().getTime()
}//定时发送心跳包
setInterval(function() {ws.send(JSON.stringify(heartBeat));
}, 30000);//监听WebSocket连接关闭事件,重新连接
ws.onclose = function() {console.log("WebSocket连接关闭,重新连接...");ws = new WebSocket("ws://localhost:8080/");
}

相关文章:

WebSocket心跳机制(笔记大全)

一、WebSocket心跳机制前端 前端实现WebSocket心跳机制的方式主要有两种: 使用setInterval定时发送心跳包。在前端监听到WebSocket的onclose()事件时,重新创建WebSocket连接。 第一种方式会对服务器造成很大的压力,因为即使WebSocket连接正…...

Spring Boot日志:SLF4J和Logback

日志的分类 SpringBoot中的日志库分为两种: 实现库:提供具体的日志实现,例如日志级别的控制、打印格式、输出目标等。外观库:自身不提供日志实现,而是对其他日志库进行封装,从而方便使用。基于外观模式实…...

[C++] C++入门第二篇 -- 引用 -- 内联函数inline -- auto+for

目录 1、引用 -- & 1.1 引用的概念 1.2 引用特性 1.3 常引用 -- 权限问题 1.4 引用的使用场景 1.4.1 做参数 1.4.2 做返回值 注意 1.5 传值、传引用的效率比较 1.6 引用和指针的区别 2、内联函数 2.1 概念 转存失败重新上传取消​编辑转存失败重新上传取消​编…...

Latex | 将MATLAB图并导入Latex中的方法

一、问题描述 用Latex时写paper时,要导入MATLAB生成的图进去 二、解决思路 (1)在MATLAB生成图片的窗口中,导出.eps矢量图 (2)把图上传到overleaf的目录 (3)在文中添加相应代码 三…...

JSON格式Python,Java,PHP等封装根据关键词搜索获取淘宝商品列表数据API

淘宝是一个网上购物平台,售卖各类商品,包括服装、鞋类、家居用品、美妆产品、电子产品等。要用关键词搜索获取淘宝天猫商品列表,您可以通过开放平台的接口或者直接访问淘宝天猫商城的网页来获取商品列表详细信息。以下是两种常用方法的介绍&a…...

MySQL MHA高可用配置及故障切换

文章目录 一.MySQL MHA1.什么是MHA2.MHA的组成2.1MHA Node (数据节点)2.2MHA Manager (管理节点) 3.MHA的特点4.&#xf…...

PHP8知识详解:PHP8开发工具VS Code的安装

作为PHP8的开发工具有很多,具有IDE功能的有phpstorm、Visual Studio Code、Sublime Text、NetBeans、Eclipse、Codelobster、PHP Designer等,当然还有很多轻量的工具,比如Notepad、Editplus等。本文给你介绍的是万能编辑器Visual Studio Code…...

Sui Move与标准Move的有哪些区别和根本性创新

Sui网络将Sui Move作为其本地编程语言,使用Sui Move编写的apps利用Sui的共识机制,实现了令人印象深刻的交易性能。 然而,熟悉Move编程语言的开发者在探索Sui文档时可能会感到困惑,因为该文档着重介绍了对象和一些指令&#xff0c…...

构建自己的ChatGPT:从零开始构建个性化语言模型

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…...

【react】react18的学习(十二)– 底层原理(二)之 迭代器 iterator

迭代器iterator 是一种 ES6 规范,具有这种机制的数据结构才可以使用for of循环:返回每一项的值; 原型链具有Symbol.iterator属性的数据结构都具备;如数组、部分类数组、字符串等; 普通对象就不能用; for-…...

一遍过JavaSE基础知识

文章目录 前言安装Java Development Kit (JDK)安装jdk配置开发环境验证是否安装配置成功 编写第一个Java程序hello world运行Java程序的流程 数据类型和变量数据类型变量 程序逻辑控制条件语句循环语句跳转语句 数组声明和创建数组访问数组元素数组长度遍历数组多维数组 面向对…...

【云原生】Kubernetes之ConfigMap

ConfigMap ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时, Pods 可以将其用作环境变量、命令行参数或者存储卷中的配置文件 ConfigMap 将你的环境配置信息和 容器镜像 解耦,便于应用配置的修改 说明:…...

8.python设计模式【组合模式】

内容:将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。角色: 抽象组建(component)叶子组建(Leaf)复合组建(Composite)客户端 (Client) UML 图 举个例子 需求&#xf…...

tkinter制作任意图形窗口

import tkinter from PIL import Image, ImageTkdog tkinter.Tk() # 设置图片描绘的坐标,注意乘号是字母x dog.geometry(500x500200100) # 不允许修改大小 dog.resizable(False, False) # 不显示标题栏 dog.overrideredirect(True) # 设置白色透明色,这…...

视频监控综合管理平台EasyCVR多分屏默认播放协议的配置优化

视频监控综合管理平台EasyCVR具备视频融合汇聚能力,TSINGSEE青犀视频平台基于云边端一体化架构,可支持多协议、多类型设备接入,包括:NVR、IPC、视频编码器、无人机、车载设备、智能手持终端、移动执法仪等。国标GB28181视频平台Ea…...

2023杭电多校第三场 1012.Noblesse Code

传送门:Vjudge 前题提要:一道挺有意思的数论题.赛时对于这道题没什么想法,但是赛后细品之后其实感觉也就那么一回事.但是这种 更相损减术与辗转相除法 相转化的题目还是有点典的,需要好好消化一下. 首先看完题目.我们需要考虑的是 ( A , B ) (A,B) (A,B)与 ( a , b ) (a,b) (…...

ubuntu qt 环境变量配置

ubuntu设置qt环境变量 qt 安装路径为:/home/ljn/Qt5.12 包含bin等目录的路经:/home/ljn/Qt5.14.2/5.14.2/gcc_64 环境变量配置 打开配置文件: sudo gedit /etc/profile在底部添加: export PATH"/home/ljn/Qt5.14.2/Tool…...

按照Vue写WPF(0):功能实现

文章目录 前言VUE具有的功能如何专业到WPF上面 前言 我最近学了WPF之后我终于知道为什么WPF学习曲线那么陡峭了。因为WPF没有组件化的思想,或者说没有按照Vue一样去模板化开发。 为什么我推荐Vue的想法呢。因为Vue最大的特点就是模板化,让Vue工程师去写…...

vb+ACCESS教师管理系统设计设计与实现

--------------前言-------------- 教师管理系统是一个企事业单位不可缺少的部分,它的内容对于企事业单位的决策者和管理者来说都至关重要,所以教师管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件信息,这种管理方式存在…...

C++笔记之对指针类型的变量进行+1操作

C笔记之对指针类型的变量进行1操作 在C中,对指针类型的变量进行"1"操作会根据指针的数据类型而有所不同。这涉及到指针的算术运算,C中的指针算术运算是根据指针所指向的数据类型的大小来进行的。 code review! 文章目录 C笔记之对指针类型的…...

基于SpringBoot + Vue的基于线性回归的音乐推荐系统(爬虫 + 可视化大屏)

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 💛博主介绍&#…...

告别手动翻找!用bcftools和Python脚本3分钟搞定VCF文件样本清单提取

告别手动翻找!用bcftools和Python脚本3分钟搞定VCF文件样本清单提取 在基因组数据分析的日常工作中,VCF文件就像一本厚重的电话簿,记录着每个样本的遗传变异信息。而样本ID清单则是这本电话簿的目录页——没有它,我们甚至不知道手…...

MaskGIT Revolution: How Bidirectional Transformers Redefine Image Synthesis

1. MaskGIT如何颠覆传统图像生成模式 想象一下你正在拼一幅巨型拼图。传统方法要求你从左上角开始,严格按照从左到右、从上到下的顺序一块块拼接。这就是当前主流图像生成Transformer的工作方式——自回归解码。而MaskGIT带来的革命性变化,就像允许你同时…...

保姆级教程:手把手教你用Dify 0.6.0源码搭建自己的AI工作流引擎(附避坑指南)

从零构建AI工作流引擎:Dify 0.6.0源码实战指南 当你第一次打开Dify的源码仓库,可能会被那些复杂的目录结构和抽象类搞得一头雾水。别担心,三周前我也和你一样,直到我亲手将这套系统跑起来并修改了第一个工作流节点。本文将带你用最…...

算法岗面试避坑指南:从运动控制到ROS实战的思维跃迁

1. 运动控制算法岗面试的核心痛点 运动控制算法岗位的面试往往聚焦于候选人对复杂系统的理解能力。很多同学在准备这类面试时容易陷入两个极端:要么死磕公式推导却说不清实际应用场景,要么堆砌项目经历但缺乏技术深度。我在面试实习生时经常遇到这样的情…...

3步终结磁盘焦虑:Windows Cleaner让系统性能提升200%的实战指南

3步终结磁盘焦虑:Windows Cleaner让系统性能提升200%的实战指南 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 现象诊断:当C盘爆红成为工…...

相场模拟——合金,金属凝固模型,各向异性枝晶生长karma 合金凝固模型,选区激光熔融,激光增...

相场模拟——合金,金属凝固模型,各向异性枝晶生长karma 合金凝固模型,选区激光熔融,激光增材制造,选择性激光熔融,SLM,定向凝固,熔铸 1matlab,实现合金各向异性枝晶生长&…...

终极指南:如何免费快速在线绘制专业流程图?GraphvizOnline完整教程

终极指南:如何免费快速在线绘制专业流程图?GraphvizOnline完整教程 【免费下载链接】GraphvizOnline Lets Graphviz it online 项目地址: https://gitcode.com/gh_mirrors/gr/GraphvizOnline 在当今数字化时代,无论是软件开发、项目管…...

解决Windows系统卡顿:Win11Debloat全方位优化工具使用指南

解决Windows系统卡顿:Win11Debloat全方位优化工具使用指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter an…...

别再死记硬背公式了!用Matlab/Simulink手把手教你调PMSM的电流环PI参数(附模型)

永磁同步电机电流环PI参数整定实战:从理论推导到Simulink验证 在电机控制领域,永磁同步电机(PMSM)因其高效率、高功率密度等优势,已成为工业驱动和电动汽车的主流选择。而磁场定向控制(FOC)作为PMSM的核心控制策略,其性能很大程度…...