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

Download history 56/week @ 2024-04-22 142/week @ 2024-04-29 14/week @ 2024-05-06 53/week @ 2024-05-13 97/week @ 2024-05-20 131/week @ 2024-05-27 219/week @ 2024-06-03 149/week @ 2024-06-10 58/week @ 2024-06-17 22/week @ 2024-06-24 36/week @ 2024-07-01 6/week @ 2024-07-08 16/week @ 2024-07-15 10/week @ 2024-07-22 43/week @ 2024-07-29 14/week @ 2024-08-05

83 每月下载量
3 个crates中使用了 (直接使用2个)

自定义许可证

235KB
5.5K SLoC

ws-tool

一个易于使用的WebSocket客户端/服务器工具包,支持阻塞/异步IO。

特性矩阵

IO类型 分割 代理 TLS 缓冲流 Deflate 用作客户端 用作服务器
阻塞
异步

Web框架集成

对于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