WebSocket 中的心跳是什么,有什么作用?

在网络应用开发中,WebSocket 是一种重要的通信协议,它允许客户端和服务器之间建立持久性的双向通信连接。然而,为了保持连接的稳定性,WebSocket 中的心跳是一个不可或缺的概念。本文将详细介绍 WebSocket 中的心跳是什么,以及它的作用。

什么是 WebSocket 心跳?

WebSocket 心跳是指定期向服务器发送小型数据包的过程,以保持连接的活跃状态。这些小型数据包通常称为心跳包。WebSocket 心跳的基本思想是在客户端和服务器之间定期发送数据,以防止连接由于长时间没有通信而被关闭。

心跳的作用

WebSocket 心跳的作用非常重要:

  1. 保持连接活跃性:在某些情况下,网络设备或防火墙可能会关闭不活跃的连接。通过定期发送心跳包,WebSocket 连接能够保持活跃状态,从而避免被关闭。
  2. 检测连接状态:心跳包的发送和接收可以用来检测连接的状态。如果服务器停止响应心跳包,客户端可以将连接标记为断开,并采取相应的措施,如重新连接或显示错误信息。

WebSocket 心跳的实现

下面是一个简单的 JavaScript 代码示例,演示了如何在 WebSocket 连接中实现心跳:

// 创建 WebSocket 连接
const socket = new WebSocket('wss://example.com');// 定义心跳包数据
const heartbeatData = 'heartbeat';// 定时发送心跳包
const heartbeatInterval = setInterval(() => {if (socket.readyState === WebSocket.OPEN) {socket.send(heartbeatData);}
}, 5000); // 每隔 5 秒发送一次心跳包// 监听消息
socket.addEventListener('message', (event) => {const message = event.data;// 判断收到的消息是否是心跳包if (message === heartbeatData) {// 收到心跳包,更新连接状态console.log('Received heartbeat from server.');} else {// 处理其他消息console.log('Received message from server:', message);}
});// 监听连接关闭事件
socket.addEventListener('close', (event) => {clearInterval(heartbeatInterval);console.log('WebSocket connection closed with code:', event.code);
});

在这个示例中,我们创建了一个 WebSocket 连接,并定时发送心跳包。如果收到来自服务器的心跳包,我们会更新连接状态。如果连接关闭,我们也会清除心跳定时器。

结论

WebSocket 中的心跳是一种维持连接活跃性的重要机制。通过定期发送小型数据包,可以防止连接由于不活跃而关闭,同时也能检测连接的状态。

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

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

相关文章

博客系统前端页面(项目实战系列1)

目录 前言: 1.前端 1.1博客列表页 1.1.1博客列表页效果预览图 1.1.2实现导航栏 1.1.3实现版心个人信息博客列表 1.2博客详情页 1.2.1博客详情页效果预览图 1.2.2实现导航栏 版心个人信息 1.2.3实现博客正文 1.3登录页 1.3.1登录页效果预览图 1.3.2导航…

Redis是如何保证高可用的?

Redis这种基于内存的关系型数据库我们在选用的时候就是考虑到它的快。而且可以很方便的实现诸如分布式锁、消息队列等功能。 笔者在前一段秋招面试的时候就被提问,“Redis是怎么保证高可用的?” 后续的子问题包含,集群模式是怎么实现的&…

睿趣科技:抖音开网店要怎么找货源

在当今数字化的时代,电商平台的兴起为越来越多的人提供了开设网店的机会,而抖音作为一个充满活力的短视频平台,也为创业者提供了广阔的发展空间。然而,对于许多初次涉足电商领域的人来说,找到合适的货源却是一个重要的…

Qt应用开发(拓展篇)——示波器/图表 QCustomPlot

一、介绍 QCustomPlot是一个用于绘图和数据可视化的Qt C小部件。它没有进一步的依赖关系,提供友好的文档帮助。这个绘图库专注于制作好看的,出版质量的2D绘图,图形和图表,以及为实时可视化应用程序提供高性能。 QCustomPl…

../../ 目录遍历

在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应的文件。 在这个过程中,如果后…

前端工程化概述

软件工程定义:将工程方法系统化地应用到软件开发中 前端发展历史 前端工程化的发展历史可以追溯到互联网的早期阶段,随着前端技术的不断演进和互联网应用的复杂化,前端工程化也逐渐成为了前端开发的重要领域。以下是前端工程化的主要发展里程…

UE5 运行时捕捉外部窗口并嵌入到主窗口

UE5 运行时捕捉外部窗口并嵌入到主窗口的一种方法 创建一个Slate类用于生成一个窗口 .h// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include "Widgets/SCompoundWidget.h"/*…

Three.js 实现模型材质局部辉光(发光,光晕)效果和解决辉光影响场景背景图显示的问题

1.Three.js 实现模型材质局部辉光(发光,光晕)效果 2.解决辉光效果影响场景背景图显示的问题 相关API的使用: 1. EffectComposer(渲染后处理的通用框架,用于将多个渲染通道(pass)组…

Training Technology One : Distribution

文章目录 训练命令初始化获得分布式参数设定GPU初始化同步输出控制(非常规流程,技巧)*分布式判断(非常规流程,技巧)* 数据集模型训练 本节内容以BLIP的分布式训练代码为蓝本介绍分布式训练的过程. 本文采用DDP作为分布式框架, 库为torch.distributed. 训练命令 python -m tor…

Docker搭建LNMP----(超详细)

目录 ​编辑 一、项目环境 1.1 所有安装包下载: 1.3 服务器环境 1.4任务需求 二、Ngin 2.1、建立工作目录 2.2 编写 Dockerfile 脚本 2.3准备 nginx.conf 配置文件 2.4生成镜像 2.5创建自定义网络 2.6启动镜像容器 2.7验证 nginx、 三、Mysql 3.1建立…

http请求中token和cookie有什么区别? 连环问:session和JWT那个更好? 连环问:如何实现SSO单点登录?

参考地址:SameSite cookies explained cookie: 1. HTTP无状态,每次请求都要带cookie,以帮助识别身份 2. 服务端也可以向客户端set-cookie, cookie大小限制4kb 3. 默认有跨域限制:不可跨域共享、传递cookie cookie本地存储: 1. HTML5之前 cookie 常被用于本地存储 …

APEX内置验证与授权管理

参考博客:(真的很好的教程,感谢!) 09技术太卷我学APEX-定制页面及导航菜单权限_白龙马5217的博客-CSDN博客https://blog.csdn.net/html5builder/article/details/128816236?spm1001.2014.3001.5501 1 应用程序安全性…

海外网红营销中的创新技术与趋势:AI、AR和VR的应用探索

随着全球数字化时代的不断发展,互联网已经成为连接人们的桥梁,而社交媒体则在其中扮演着举足轻重的角色。在这个全球性的社交媒体网络中,海外网红以其独特的个人魅力和内容创作能力迅速崭露头角。而为了在竞争激烈的市场中脱颖而出&#xff0…

并发和并行的区别 以及什么是串行,还有同步和异步;阻塞非阻塞;还有进程、线程、协程一次说清。

。 并发和并行的区别 以及什么是串行,还有同步和异步:阻塞非阻塞: 并发:多个任务在同一个 CPU 核上,按细分的时间片轮流(交替)执行,从逻辑上来看那些任务是同时执行。并行:单位时间内&#xf…

BBS项目 day05 后台系统功能(首页、文章列表展示、添加文章、上传文件(uuid生成新的文件名))

一、后台功能的初始配置 1. urls.py路由分发 re_path(app02/, include(app02.urls)),2.app02/urls.py from django.urls import path, re_path, include from app02 import viewsurlpatterns [path(home/, views.home),path(article_list/, views.article_list),path(add_ar…

单片机(二)使用位移 让灯亮

一:硬件电路 P2 口: P2.0~ P2.7 是这些 I0 口 LED 阳极接 电源 , P20 口 为低电平 可以让 LED灯 亮 二:软件实现部分 两种 ① 通过循环 来展示从左 到右 #include "reg52.h"#define LED_PORT P2 // 定义单片机的P2端…

软考A计划-系统集成项目管理工程师-项目变更管理

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

Jackson 实现 JSON 字段类型处理器

1.处理过程 1.1 实体类设为autoResultMap true TableName(value "table1", autoResultMap true)1.2 字段 typeHandler JacksonTypeHandler.class ApiModelProperty(value "明细")TableField(value "detail", typeHandler JacksonTypeHa…

【Spring Boot】Spring Boot整合多数据源

文章目录 前言一、基本概念1.1 什么是多数据源?1.2 为什么要使用多数据源? 二、如何在 Spring Boot 中整合多数据源?2.1 基本配置2.2 项目代码2.3 注意事项 前言 在实际的开发工作中,我们经常会遇到需要整合多个数据源的情况&…

Nginx使用keepalived配置VIP

VIP常用于负载均衡的高可用,使用VIP可以给多个主机绑定一个IP,这样,当某个负载应用挂了之后,可以自动切到另一个负载。 我这里是在k8s环境中做的测试,集群中有6个节点,我给140和141两个节点配置VIP。 1. 安…