32个版本
0.11.0 | 2024年1月11日 |
---|---|
0.10.5 | 2023年12月20日 |
0.10.2 | 2023年11月23日 |
0.8.1 | 2023年7月10日 |
0.2.0 | 2021年6月24日 |
#37 in WebSocket
83 每月下载量
在 3 个crates中使用了 (直接使用2个)
235KB
5.5K SLoC
ws-tool
一个易于使用的WebSocket客户端/服务器工具包,支持阻塞/异步IO。
特性矩阵
IO类型 | 分割 | 代理 | TLS | 缓冲流 | Deflate | 用作客户端 | 用作服务器 |
---|---|---|---|---|---|---|---|
阻塞 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
异步 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Web框架集成
- axum 查看 examples/ext_axum
- poem 查看 examples/ext_poem
对于TLS连接,ws-tool同时支持native-tls和rustls,ws-tool还支持SIMD UTF检查,以实现更快的UTF8字符串检查。
由autobaha测试套件测试。查看4个示例的 测试报告
用法
每个示例都可以使用以下命令运行
cargo run --example <example_name> --all-features
命令。
查看
- examples/echo_async_server 用于构建具有自签名证书的WebSocket回显服务器。
- examples/echo 展示了如何连接到服务器。
- binance 展示了如何通过http/socks代理连接到wss服务器。
- poem 展示了如何与poem Web框架集成。
- autobaha_xxx_client 是autobaha测试套件客户端
- bench_xxx 是基准服务器示例,展示了如何控制读写缓冲区或其他底层配置
运行autobahn测试套件
启动测试服务器
./script/start_autobahn_server.sh
在其他终端运行测试
cargo ac
cargo aac
cargo adc
cargo aadc
报告文件应位于 test_reports
目录下。
性能
性能是一个复杂的问题,单一的性能指标不足以描述某个库的性能。在这里,我们仅以QPS作为ws-tool性能的简要描述。
我的测试机器是i9-12900k,32GB,3200MHz DDR4,负载测试客户端是load_test
大致与EchoServer示例、tungstenite进行比较。
以下为基准测试(仅1个连接)结果,没有tungstenite带缓冲流测试用例,因为tungstenite与缓冲流不兼容,fastwebsockets未添加,因为在此次测试中性能非常差,如果您知道如何提高fastwebsockets的性能,请提交一个PR!tokio运行时使用current_thread风味。
300字节有效负载大小,100000000条消息
cargo lt -- -b 819200 -p 300 --count 100000 -t 1 <url>
服务器 | 计数 | 持续时间(毫秒) | 消息/秒 |
---|---|---|---|
uWebSocket | 100000000 | 10014 | 9986019.57 |
tungstenite | 100000000 | 21566 | 4636928.50 |
bench_server(8k) | 100000000 | 29597 | 3378720.82 |
bench_server(800k) | 100000000 | 9320 | 10729613.73 |
bench_async_server(8k) | 100000000 | 17846 | 5603496.58 |
bench_async_server(800k) | 100000000 | 14006 | 7139797.23 |
1MB字节有效负载大小,100000条消息
cargo lt -- -p 1048576 --count 100 -t 1 <url>
服务器 | 计数 | 持续时间(毫秒) | 消息/秒 |
---|---|---|---|
uWebSocket | 100000 | 34195 | 2924.40 |
tungstenite | 100000 | 40139 | 2491.34 |
bench_server(无缓冲) | 100000 | 16405 | 6095.70 |
bench_server(8k) | 100000 | 17240 | 5800.46 |
bench_async_server(无缓冲) | 100000 | 17190 | 5817.34 |
bench_async_server(8k) | 100000 | 17027 | 5873.03 |
您可以使用load_test工具尝试更多组合。
HTTP头部样式
对于多个扩展/协议,ws-tool更倾向于使用具有相同名称的多个头部,而不是用逗号分隔的值。但ws-tool仍然尝试从逗号分隔的头部值中解析扩展/协议。
参考
依赖项
~2–18MB
~261K SLoC