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通信了。

  1. **数据传输阶段**:
  • 一旦握手成功,客户端和服务器之间就建立了一个持久的连接,这个连接会保持打开状态,直到其中一方显式地关闭它。

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

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

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

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

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

相关推荐
GitLqr15 小时前
玩转 WebSocket:从原理到 Flutter 实战
websocket·网络协议·flutter
乱七八糟的屋子2 天前
Poco C++高级实战教程:线程池+日志系统+加密算法+WebSocket长连接
c++·websocket·加密解密·#poco·#c++高级开发
宠友信息4 天前
MySQL复合索引与Druid优化仿小红书源码个人主页查询链路
数据库·spring boot·websocket·mysql·uni-app
程序猿乐锅4 天前
【苍穹外卖 day10|Spring Task、WebSocket 与来单提醒、催单铃声实现】
java·websocket·spring
宠友信息5 天前
消息撤回与已读状态如何在即时通讯源码中统一管理
java·spring boot·websocket·mysql·uni-app
paopaokaka_luck7 天前
基于Springboot3+vue3的旅游景区点评系统(AI审核、webSocket聊天、协同过滤算法、Echarts图形化分析)
websocket·网络协议·旅游
熬夜苦读学习7 天前
基于websocket的多用户五子棋网页游戏
linux·服务器·网络·websocket·网络协议·游戏·五子棋
米尔的可达鸭7 天前
深入操作系统 Socket 底层:EPOLLOUT 可写事件管理 + 非阻塞异步
开发语言·网络·数据结构·经验分享·websocket·网络协议
米尔的可达鸭8 天前
深入操作系统 Socket 底层:套接字控制块、FD映射、阻塞IO核心完整实现
arm开发·数据结构·websocket·网络协议·算法·架构·安全架构
永久鳕11 天前
WebSocket 连接成功但行情不更新,应该先查哪几个状态?
网络·websocket·网络协议