WebSocket 是一种网络通信协议,提供了在单个 TCP 连接上进行全双工通讯的能力。它是 HTML5 的一部分,允许服务器和客户端之间进行实时、双向的交互通信。
与 HTTP 的主要区别
1. 通信模式
- HTTP: 半双工通信,客户端发起请求,服务器响应后连接关闭
- WebSocket: 全双工通信,双方可以同时发送和接收数据
2. 连接持久性
- HTTP: 无状态协议,每次请求都需要建立新的连接
- WebSocket: 持久连接,建立后可以保持长时间通信
3. 协议开销
- HTTP: 每次请求都包含完整的 HTTP 头部,开销较大
- WebSocket: 建立连接后,数据帧头部很小(2-14 字节),开销极低
4. 实时性
- HTTP: 需要轮询或长轮询来实现实时通信,延迟较高
- WebSocket: 服务器可以主动推送数据,实时性强
WebSocket 协议特点
握手过程
WebSocket 通过 HTTP 升级机制建立连接:
shell客户端请求: GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Version: 13 服务器响应: HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
数据帧格式
WebSocket 使用轻量级的数据帧格式,支持文本和二进制数据传输。
应用场景
- 实时聊天应用
- 在线游戏
- 股票行情推送
- 协同编辑
- 实时监控和仪表板