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

websockets怎么工作的呢?

WebSockets是一种在单个TCP连接上进行全双工通信的协议,使得客户端和服务器之间的数据交换变得更加简单,并允许服务端主动向客户端推送数据。下面是WebSockets的工作原理:

 

1. **握手阶段**:

   - 客户端发起一个HTTP请求到服务器,这个请求中包含了升级协议到WebSocket的头部字段(如`Upgrade: websocket`,`Connection: Upgrade`,以及一个特定的协议版本和子协议请求等)。

   - 服务器收到这个请求后,如果同意升级协议,会返回一个HTTP响应,状态码为101 Switching Protocols,并且包含同样的升级头部字段,以及一个唯一标识此次连接的Sec-WebSocket-Accept字段(这个字段的值是请求中的Sec-WebSocket-Key字段与特定的GUID字符串连接后进行SHA-1哈希运算,再将结果进行Base64编码得到的)。

   - 当客户端收到这个响应后,就知道协议已经成功升级,然后客户端和服务器就可以开始WebSocket通信了。

 

2. **数据传输阶段**:

   - 一旦握手成功,客户端和服务器之间就建立了一个持久的连接,这个连接会保持打开状态,直到其中一方显式地关闭它。

   - 在这个连接上,客户端和服务器可以互相发送和接收数据。WebSocket数据帧是以二进制格式传输的,它们可以是文本帧(UTF-8编码的文本数据)或二进制帧(原始二进制数据)。

   - 数据帧在传输时会有一个小的头部,包含了操作码(表示这是一个文本帧、二进制帧还是其他类型的帧)、负载长度等信息。这个头部相对于HTTP请求来说开销要小得多,因此WebSocket更适合于需要频繁传输小量数据的场景。

 

3. **关闭连接**:

   - 当客户端或服务器想要关闭连接时,会发送一个关闭帧。关闭帧可以包含一个状态码和可选的关闭原因。

   - 收到关闭帧的一方会回应一个关闭帧,然后双方都会关闭连接,释放资源。

 

WebSocket的这种工作方式使得它非常适合于需要实时通信的场景,如在线聊天、实时数据更新等。与传统的HTTP轮询或长轮询相比,WebSocket减少了不必要的网络开销和延迟,提供了更高效、更实时的数据传输能力。

相关文章:

websockets怎么工作的呢?

WebSockets是一种在单个TCP连接上进行全双工通信的协议,使得客户端和服务器之间的数据交换变得更加简单,并允许服务端主动向客户端推送数据。下面是WebSockets的工作原理: 1. **握手阶段**: - 客户端发起一个HTTP请求到服务器&…...

栈 数组和链表实现

stack 栈 LIFO后进先出 应用 实现递归 编辑器的撤回工作&#xff08;按下ctrl z&#xff09; 数组实现 // 列表的插入和删除从一端实现 那么就得到了栈 // array和linked lists//stack-Array based implementation #include<stdio.h> #include<stdlib.h> #def…...

如何备份和恢复华为手机?

智能手机已成为我们日常生活中不可或缺的一部分&#xff0c;它们存储着大量敏感数据。因此&#xff0c;确保数据安全&#xff0c;定期备份至关重要&#xff0c;以防手机意外丢失、损坏或被盗。 如果您拥有华为设备&#xff0c;并且正在寻找如何将华为手机备份到PC的方法&#…...

微波电路S参数测量实验方案

一、实验目的 用矢量分析仪测S参数&#xff0c;验证电磁波&#xff0c;检测电磁波在波导中的传播模式。 二、实验内容 用矢量分析仪测试微波滤波器的二端口S参数&#xff0c; 三、基本 四、实验步骤 1对矢量网络分析仪进行参数设置 2矢量网络分析仪进行校准 单端口校准…...

SpringTask Cron表达式

Cron表达式格式 1.Cron表达式格式 Cron表达式是一个字符串&#xff0c;字符串以5或6个空格隔开&#xff0c;分为6或7个域&#xff0c;每一个域代表一个含义&#xff0c;Cron有如下两种语法格式&#xff1a; 秒 分 时 一个月第几天 月 一个星期第几天 年 &…...

docker与docker-compose安装

1.1 安装工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm21.2 添加docker的yum库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sudo yum makecache fast1.3 安装Docker sudo yum install docke…...

跨境反向海淘系统:业务流程解析与未来发展展望

随着全球化的深入发展和互联网技术的飞速进步&#xff0c;跨境购物已经成为越来越多消费者日常生活中的一部分。在这个过程中&#xff0c;反向海淘系统以其独特的优势&#xff0c;逐渐崭露头角&#xff0c;成为跨境电商领域的新星。作为一名在跨境反向海淘系统业务中耕耘了10年…...

Python语言字母:深度解析与魅力探索

Python语言字母&#xff1a;深度解析与魅力探索 Python&#xff0c;作为一种广泛使用的编程语言&#xff0c;其字母背后蕴含着丰富的内涵和深厚的魅力。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;深入剖析Python语言字母所蕴含的秘密和魅力&#xff0c;带您…...

基于JSP技术的社区疫情防控管理信息系统

你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;JSP 数据库&#xff1a;MySQL 技术&#xff1a;JSPJavaBeans 工具&#xff1a;MyEclipse、Tomcat、Navicat 系统展示 首页 用户注册与登录界…...

区间预测 | Matlab实现QRBiTCN分位数回归双向时间卷积神经网络注意力机制时序区间预测

Matlab实现QRBiTCN分位数回归双向时间卷积神经网络注意力机制时序区间预测 目录 Matlab实现QRBiTCN分位数回归双向时间卷积神经网络注意力机制时序区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现QRBiTCN分位数回归双向时间卷积神经网络注意力机制时序…...

Spring MVC中,一个HTTP请求可能会被多个Handler处理

在Spring MVC中&#xff0c;一个HTTP请求可能会被多个Handler处理。这些Handler可能是HandlerInterceptor&#xff0c;ControllerAdvice&#xff0c;或者是具体的Controller。以下是这些Handler的执行顺序&#xff1a; 1. HandlerInterceptor的preHandle方法 当一个HTTP请求到…...

Vue3 时间格式化

1、基础使用 https://juejin.cn/post/6933548549321785352 2、template里面直接使用 $dayjs(info.patientBirthday).format("YYYY-MM-DD") 3、script里面使用 import { ref, reactive, getCurrentInstance } from "vue"; const { proxy } getCurren…...

SVN中trunk,branch,tag

SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤_svn 分支-CSDN博客 场景: 项目的1.0版本已经完成开发,测试,并上线了. 接到了新需求,要修改多个文件的代码. 你写了一段时间的时候,用户或测试人员反馈, 1.0版本有重大bug要修复,修复好后立刻上线. 此时应该怎么…...

React ahooks库和React Query库使用场景分析

文章目录 前言一、在一个前台项目中&#xff0c;如区块链项目&#xff0c;需大量轮询接口&#xff0c;这时候哪个好二、ahooks一般可以用在什么项目上三、推荐react-query一些常用的hook四、推荐ahooks一些常用的hook总结 前言 ahooks和react-query都是好用的react库&#xff…...

国产AI大模型哪家强?从投资者角度简单横评5款大模型!

前言01 国产AI大模型哪家强&#xff1f; 我平时主要使用“腾讯元宝、Kimi”这2款AI大模型&#xff0c;对于其他国产知名AI大模型的表现&#xff0c;我同样充满好奇。 本次从个人投资者的角度&#xff0c;结合非控股子公司的问题&#xff0c;来测试各AI大模型的实力。本次测试…...

uc/OS-III多任务程序

目录 一、基于STM32CubeMX建立工程二、获取uC/OS-III源码三、代码移植1.复制uC/OS-III文件到工程文件夹2.工程组件和头文件路径的添加打开工程&#xff0c;添加一下六个组添加文件到分组添加头文件路径 3.文件内容的修改启动文件app_cfg.hincludes.hbsp.c和bsp.hlib_cfg.happ.c…...

6月13日在线研讨会 | 多产品多流程多团队的ALM选择方案

随着汽车产业步入“软件定义汽车”时代&#xff0c;传统汽车产业的硬件中心模式逐渐被软件与服务的核心地位所取代&#xff0c;这是一场对汽车设计、制造及运营的全方位重塑。在这一转型过程中&#xff0c;如何高效管理汽车的整个生命周期成为了一项全新挑战。在此背景下&#…...

Maven使用${revision}实现多模块版本统一管理及注意事项

在 Maven 中&#xff0c;确实可以利用 ${revision} 来实现多模块项目的版本统一管理&#xff0c;尤其是在使用一些高级特性如 Maven Release Plugin 或者是在 CI/CD 流程中动态设置版本时。${revision} 是一个特殊的变量&#xff0c;它允许你在构建时动态地使用或设定项目的版本…...

vue2 bug求助!!!(未解决,大概是浏览器缓存的问题或者是路由的问题)

我的vue2项目出现了一个超级恶心的bug 过程&#xff1a; 1 操作流程&#xff1a;页面a点击a标签->到页面b->页面b用户退出刷新页面->点击浏览器的返回按钮返回上一页 2 结果&#xff1a;返回页面后页面没有刷新导致用户名还显示着&#xff0c;页面没有发生任何变化&a…...

C++的“引用”是条寄生虫

在C中&#xff0c;引用&#xff08;reference&#xff09;是一个已存在变量的别名&#xff08;alias&#xff09;。比如鲁讯原名周树人&#xff0c;前者就是后者的别名。 一、引用的用法 定义引用时需要用到&&#xff0c;用法如下&#xff1a; int ival 9527; int &am…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...