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

http://www.lryc.cn/news/365909.html

相关文章:

  • 栈 数组和链表实现
  • 如何备份和恢复华为手机?
  • 微波电路S参数测量实验方案
  • SpringTask Cron表达式
  • docker与docker-compose安装
  • 跨境反向海淘系统:业务流程解析与未来发展展望
  • Python语言字母:深度解析与魅力探索
  • 基于JSP技术的社区疫情防控管理信息系统
  • 区间预测 | Matlab实现QRBiTCN分位数回归双向时间卷积神经网络注意力机制时序区间预测
  • Spring MVC中,一个HTTP请求可能会被多个Handler处理
  • Vue3 时间格式化
  • SVN中trunk,branch,tag
  • React ahooks库和React Query库使用场景分析
  • 国产AI大模型哪家强?从投资者角度简单横评5款大模型!
  • uc/OS-III多任务程序
  • 6月13日在线研讨会 | 多产品多流程多团队的ALM选择方案
  • Maven使用${revision}实现多模块版本统一管理及注意事项
  • vue2 bug求助!!!(未解决,大概是浏览器缓存的问题或者是路由的问题)
  • C++的“引用”是条寄生虫
  • 人体感应提醒 大声公+微波模块
  • 正确的功能可将热晶体管风速计线性化
  • 小程序集arcgis地图显示自定义坐标的功能实现记录!(学习笔记)
  • 谷歌医疗大模型登Nature,Med-PaLM重磅揭秘!AI医生成绩比肩人类
  • java-字符串相关类的底层原理
  • C++模板编程—学习C++类库的编程基础
  • [每周一更]-(第99期):MySQL的索引为什么用B+树?
  • 详解MySQL的MVCC机制
  • docker部署skywalking
  • Mac 使用Docker安装Elasticsearch、Kibana 、ik分词器、head
  • 【Webpack4打包机制原理解析】