WebSocket 是一种基于 TCP 的双向实时通信协议,允许客户端与服务器之间建立持久连接。以下是关键知识点:
1. 协议特点 ✅
- 全双工通信:支持客户端与服务器同时发送数据
- 低延迟:建立连接后数据传输延迟极低(<100ms)
- 协议升级:通过 HTTP 初始握手实现协议切换
- 帧格式:使用
Frame
结构传输数据(含掩码、负载类型等字段) - 安全机制:支持
wss://
加密通信(TLS/SSL)
2. 工作流程 ⏱️
HTTP握手
客户端发送GET
请求包含Upgrade: websocket
头服务器响应
服务器返回101 Switching Protocols
状态码
响应头包含Sec-WebSocket-Accept
校验值数据传输
连接建立后通过帧(Frame)格式交换数据
每个帧包含:- 帧头(12字节)
- 负载数据(可变长度)
- 帧尾(4字节)
3. 使用场景 📡
- 实时聊天应用 💬
- 游戏数据同步 🎮
- 金融行情推送 💰
- 远程调试工具 🧪
- 物联网设备通信 🌐
4. 代码示例 📜
import asyncio
import websockets
async def echo(websocket, path):
async for message in websocket:
await websocket.send(f"Echo: {message}")
start_server = websockets.serve(echo, "localhost", 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
5. 注意事项 ⚠️
- 需要处理
ping/pong
消息保持连接活性 - 要实现帧的拆分与重组(Fragmentation)
- 必须处理掩码(Masking)与解码
- 建议配合
TLS
使用(wss://
) - 需要考虑协议版本兼容性(RFC 6455 或 RFC 8730)