当前位置: 首页 > 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减少了不必要的网络开销和延迟,提供了更高效、更实时的数据传输能力。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CentOS 7.8上安装ClamAV
  • 6.7.13 MV-Swin-T:使用多视图 SWIN 变压器进行乳房 X 光检查分类
  • 简单的订单系统,使用的os目录
  • 《Python程序设计》
  • LabVIEW进行图像拼接的实现方法与优化
  • 远程访问及控制
  • 手机建站介绍
  • 经济与安全兼顾:茶饮店购买可燃气体报警器的价格考量
  • 2024050401-重学 Java 设计模式《实战代理模式》
  • 嵌入式Linux系统编程 — 3.5 utime、utimes、futimens、utimensat函数修改文件时间属性
  • 【传知代码】上下位关系自动检测方法(论文复现)
  • 【全开源】房屋出租出售预约系统(FastAdmin+ThinkPHP+Uniapp)
  • 手机模拟操作进阶:1.某团获取附近商店情况
  • Servlet基础(续集)
  • ANSYS APDL中使用SF和SFFUN命令,对不同节点施加不同大小的面载荷
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【Amaple教程】5. 插件
  • CSS中外联样式表代表的含义
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • JavaScript-Array类型
  • Javascript基础之Array数组API
  • MySQL-事务管理(基础)
  • php面试题 汇集2
  • Python连接Oracle
  • Terraform入门 - 3. 变更基础设施
  • Webpack 4x 之路 ( 四 )
  • 成为一名优秀的Developer的书单
  • 代理模式
  • 简单数学运算程序(不定期更新)
  • 简析gRPC client 连接管理
  • 嵌入式文件系统
  • 用Visual Studio开发以太坊智能合约
  • Hibernate主键生成策略及选择
  • ​数据链路层——流量控制可靠传输机制 ​
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #define,static,const,三种常量的区别
  • #define、const、typedef的差别
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (ZT)薛涌:谈贫说富
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (九十四)函数和二维数组
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (七)Flink Watermark
  • (四)linux文件内容查看
  • (四)React组件、useState、组件样式
  • (已解决)什么是vue导航守卫
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • .bat批处理(五):遍历指定目录下资源文件并更新