WebSocket 详解与实践拓展
WebSocket 作为一种在 TCP 协议之上的应用层协议,解决了 HTTP 协议在实时通信场景中的局限性,为客户端与服务器之间提供了高效的双向全双工通信能力。下面将从核心特性、工作机制、代码实践及拓展应用等方面进行详细阐述。
WebSocket 核心特性
- 双向全双工通信
连接建立后,客户端和服务器可随时向对方发送数据,无需等待对方响应,通信效率远高于 HTTP 的请求 - 响应模式。 - 持久连接
一旦通过握手建立连接,会保持持久化状态,避免 HTTP 每次通信都需重新建立连接的开销。 - 协议对称性
连接建立后,客户端与服务器的通信地位平等,没有严格的 “请求方” 与 “响应方” 之分。 - 多客户端支持
单个服务器可同时接纳多个客户端连接,而客户端通常只连接一个服务器。
WebSocket 工作流程
1. 握手阶段(协议升级)
客户端通过 HTTP 请求发起握手,核心是请求将协议从 HTTP 升级为 WebSocket。
- 客户端请求头关键字段
Upgrade: websocket:声明要升级到 WebSocket 协议Connection: Upgrade:配合 Upgrade 字段,确认协议升级意图Sec-WebSocket-Key:随机字符串,用于服务器验证并生成Sec-WebSocket-AcceptSec-WebSocket-Version: 13:指定 WebSocket 协议版本(当前主流版本)
- 服务器响应头关键字段
HTTP/1.1 101 Switching Protocols:表示协议切换成功Sec-WebSocket-Accept:由服务器通过Sec-WebSocket-Key计算生成,客户端会验证该值以确认握手成功
2. 数据传输阶段
握手成功后,双方通过 WebSocket 帧格式传输数据,支持文本、二进制等类型。传输过程中可随时发送消息,无需额外的请求头开销。
3. 连接关闭阶段
任意一方可主动关闭连接,关闭时会触发 onclose 事件,并可携带关闭原因(如正常关闭、协议错误等)。
WebSocket 端点与 URI
端点 URI 格式
WebSocket 端点的 URI 格式为: