文章目录
WebSocket 是一种基于 TCP 的 全双工通信协议,通过在客户端与服务器之间建立持久化连接,实现 低延迟、高频率的双向实时数据传输,解决了传统 HTTP 轮询的效率问题,成为实时交互场景(如聊天、在线游戏、金融行情)的核心技术方案。
一、WebSocket 的核心原理
1. 连接建立:HTTP 握手升级
- 握手过程:客户端发送 HTTP 请求,头部包含
Upgrade: websocket
和Sec-WebSocket-Key
;服务器响应101 Switching Protocols
完成协议升级。 - 示例请求头:
GET /chat HTTP/1.1 Host: example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Version: 13
2. 数据帧结构
- 帧格式:包含操作码(Opcode,如文本/二进制)、掩码(Mask)、负载数据(Payload)。
- 分帧传输:支持大数据分片传输(如视频流),每帧可独立处理。
3. 持久化连接
- 长连接特性:一次握手后连接保持打开,避免 HTTP 的重复建立/断开开销。
- 心跳机制:通过定时发送 Ping/Pong 帧检测连接活性,防止超时断开。
二、WebSocket 的核心优势
对比维度 | WebSocket | 传统 HTTP 轮询 |
---|---|---|
通信模式 | 全双工双向通信 | 半双工单向请求-响应 |
延迟 | 毫秒级实时推送 | 依赖轮询间隔(通常秒级) |
带宽消耗 | 仅传输有效数据(无重复头部) | 大量冗余请求头累积消耗 |
服务器压力 | 长连接减少 TCP 握手开销 | 高频短连接消耗 CPU/内存 |
三、典型应用场景
1. 实时通信
- 聊天应用:消息即时送达(如 Slack、微信网页版)。
- 在线协作:协同编辑(如 Google Docs)、远程白板。
2. 高频数据推送
- 金融交易:股票价格实时刷新(如 Bloomberg Terminal)。
- 物联网监控:传感器数据实时上报(如温度、湿度)。
3. 游戏与互动
- 多人在线游戏:玩家动作同步(如 Agar.io)。
- 直播弹幕:观众互动消息实时展示。