WebSocket 是一种基于 TCP 的双向实时通信协议,允许客户端与服务器之间建立持久连接。以下是关键知识点:

1. 协议特点 ✅

  • 全双工通信:支持客户端与服务器同时发送数据
  • 低延迟:建立连接后数据传输延迟极低(<100ms)
  • 协议升级:通过 HTTP 初始握手实现协议切换
  • 帧格式:使用 Frame 结构传输数据(含掩码、负载类型等字段)
  • 安全机制:支持 wss:// 加密通信(TLS/SSL)

2. 工作流程 ⏱️

  1. HTTP握手
    客户端发送 GET 请求包含 Upgrade: websocket

    WebSocket_握手过程
  2. 服务器响应
    服务器返回 101 Switching Protocols 状态码
    响应头包含 Sec-WebSocket-Accept 校验值

  3. 数据传输
    连接建立后通过帧(Frame)格式交换数据
    每个帧包含:

    • 帧头(12字节)
    • 负载数据(可变长度)
    • 帧尾(4字节)
    WebSocket_协议结构

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)

了解更多 WebSocket 实现细节