引言
在现代 Web 开发中,实时通信已成为许多应用的核心需求。从在线聊天系统到实时股票行情,再到多人协作编辑工具,这些场景都依赖于高效的实时数据传输。传统的 HTTP 协议由于其请求-响应模式的限制,并不适合这类应用。今天我将分享我学习的 WebSocket 协议,它是如何实现真正的全双工通信的。

WebSocket 握手机制
WebSocket 连接的建立始于一个特殊的 HTTP 握手过程:

  1. 客户端发送 HTTP GET 请求,携带以下关键头信息:
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: [随机生成的base64编码字符串]
Sec-WebSocket-Version: 13
  1. 服务器验证这些头信息后,返回 101 状态码(Switching Protocols)响应:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: [基于客户端Key计算出的验证值]

这个握手过程完成了从 HTTP 到 WebSocket 协议的切换,之后通信将基于 WebSocket 协议进行。

全双工通信模式
WebSocket 最引人注目的特性是其全双工通信能力:
• 双向同时传输:客户端和服务器可以同时发送消息,无需等待对方完成
• 持久连接:一旦建立连接,可以长期保持,避免重复握手开销
• 低延迟:消息到达后立即被处理,无需等待新的 HTTP 请求
这种模式特别适合需要实时交互的应用场景,如在线游戏、协同编辑、实时监控等。

WebSocket 与 HTTP 的核心差异

特性 HTTP WebSocket
连接性质 短连接,每次请求后关闭 长连接,建立后可长期复用
通信方向 单向(客户端请求,服务器响应) 全双工(双方可随时发送消息)
数据格式 包含大量头部的完整报文 轻量帧结构(头部仅2-10字节)
适用场景 传统网页浏览 实时应用

WebSocket 的优势

  1. 高效传输:相比 HTTP,WebSocket 的头部开销极小,特别适合高频小数据量传输
  2. 服务器推送:服务器可以主动向客户端推送数据,无需客户端轮询
  3. 减少延迟:避免了 HTTP 的重复连接建立过程
  4. 节省带宽:长连接避免了每次通信的 TCP/IP 握手和 TLS 协商开销