WebSocket 性能测试¶
zerodep websocket 与 websockets 库的 WebSocket 往返性能对比。
测试环境
- CPU: x86_64 Linux
- Python: 3.12
- 工具: pytest-benchmark 5.2.3(报告均值)
- 参考库: websockets 15.0.1
- 最后更新: 2026-05-02
实现方式¶
| 实现 | 类型 | 描述 |
|---|---|---|
| zerodep | 同步 + 异步 | 单文件 RFC 6455 客户端,仅标准库 |
| websockets | 同步 + 异步 | 全功能 WebSocket 库 |
测试内容¶
两个客户端均连接到标准库 echo 服务器(共享 fixture)。性能测试测量完整的发送-接收往返延迟,包括帧编码、掩码和解码。
测试场景¶
| 场景 | 描述 | 负载 |
|---|---|---|
| JSON-RPC 往返 | 发送 CDP 大小的 JSON 消息,接收 echo | ~200B |
| 大负载 | 发送 SPA outerHTML 大小的内容,接收 echo | ~50KB |
| 突发消息 | 连续发送 100 条 JSON-RPC 消息,然后全部接收 | 100 x ~150B |
| 连接建立 | 连接 + 关闭握手周期 | N/A |
关键发现¶
- JSON-RPC 消息 -- 两种实现对典型 CDP 命令大小的消息均可实现亚毫秒级往返。
- 大负载 -- zerodep 处理 50KB 负载的延迟与 websockets 相当,瓶颈在 TCP I/O 而非帧编码。
- 突发消息 -- 100 条消息的顺序发送/接收测试帧编码吞吐和缓冲区管理。
- 连接开销 -- 测量 WebSocket 升级握手延迟,包括 TCP 连接、HTTP 升级和密钥验证。
- 零依赖 -- zerodep 在无 pip 依赖的情况下实现了相当的性能表现。
自行运行¶
pip install pytest pytest-benchmark websockets
pytest websocket/test_websocket_benchmark.py --benchmark-only -v
最新 CI 结果¶
每次发布时通过 Benchmark CI 自动更新。