
系统工作流程详解:
1. 连接建立阶段 (握手)
- 关键机制:
- 基于 HTTP 的协议升级机制
Sec-WebSocket-Key
和 Sec-WebSocket-Accept
的加密握手验证
- 101 状态码表示协议切换成功
- 保持原有 TCP 连接不关闭
2. 数据传输阶段
- 核心特性:
- 帧分片:大数据可分片传输(FIN=0表示还有后续帧)
- 掩码机制:客户端→服务器数据必须掩码(安全设计)
- 双工通道:双向独立数据传输
- 低延迟:平均延迟 < 50ms(HTTP轮询 > 200ms)
3. 心跳机制 (保活)
- 作用:
- 检测连接活性
- 防止 NAT/防火墙超时断开
- 默认间隔:30-60秒(可配置)
4. 连接关闭流程
- 关闭状态码:
- 1000:正常关闭
- 1001:端点离开
- 1002:协议错误
- 1003:接收到非法数据
- 1006:异常关闭
系统特性总结表
特性 |
WebSocket |
HTTP轮询 |
连接类型 |
持久化单TCP连接 |
短连接/长轮询 |
通信模式 |
全双工双向 |
半双工请求-响应 |
头部开销 |
2-14字节/帧 |
500+字节/请求 |
服务器推送 |
原生支持 |
需hack实现 |
延迟特性 |
毫秒级 |
秒级 |
适用场景 |
高频交互实时应用 |
低频数据获取 |
连接建立成本 |
1次TCP+1次握手 |
多次TCP连接 |
典型数据流示例
[客户端] FIN=1, Opcode=1, Payload="你好!"
[服务器] FIN=1, Opcode=1, Payload="收到消息!"
[服务器] FIN=1, Opcode=9, Payload="ping123"
[客户端] FIN=1, Opcode=10, Payload="ping123"
[客户端] FIN=1, Opcode=8, Payload="code=1000"
[服务器] FIN=1, Opcode=8, Payload="code=1000"
这个流程图系统展示了 WebSocket 从握手建立连接、数据帧结构设计、心跳保活机制到优雅关闭的全过程,突出了其相比传统 HTTP 在实时通信场景下的核心优势。