45个版本 (26个重大变更)
0.27.0 | 2024年7月17日 |
---|---|
0.25.1 | 2024年4月3日 |
0.25.0 | 2024年2月9日 |
0.24.0 | 2023年12月8日 |
0.2.0 | 2019年11月29日 |
#1 in WebSocket
每月下载量 231,924
用于 293 个库 (125直接使用)
98KB
2K SLoC
async-tungstenite
为async-std、tokio、gio以及任何std
Future
运行时提供异步WebSocket。
用法
在您的Cargo.toml
中添加以下内容
[dependencies]
async-tungstenite = "*"
查看examples/
目录中的客户端和服务器示例。如果您没有相关经验,您可能还需要熟悉async-std或tokio。
async-tungstenite是什么?
此crate基于tungstenite Rust WebSocket库,并提供对它的异步绑定和包装,以便您可以使用非阻塞/异步的TcpStream
,并将其与其他异步堆栈的crate结合使用。此外,可以通过功能标志启用与其他各种crate的集成。
async-tls
:启用async_tls
模块,该模块提供与async-tls TLS堆栈的集成,并且可以独立于任何异步运行时使用。async-std-runtime
:启用async_std
模块,该模块提供与async-std运行时的集成。async-native-tls
:启用async_std
模块中的附加功能,通过async-native-tls实现TLS。tokio-runtime
:启用tokio
模块,该模块提供了与 tokio 运行时的集成。tokio-native-tls
:启用tokio
模块中通过 tokio-native-tls 实现TLS的额外功能。tokio-rustls-native-certs
:启用tokio
模块中通过 tokio-rustls 实现TLS的额外功能,并使用通过 rustls-native-certs 找到的本地系统证书。tokio-rustls-webpki-roots
:启用tokio
模块中通过 tokio-rustls 实现TLS的额外功能,并使用 webpki-roots 提供的证书。gio-runtime
:启用gio
模块,该模块提供了与 gio 运行时的集成。
消息与流式传输
WebSocket提供了一个基于消息的协议,这个crate支持通过消息发送和接收数据;基于WebSocket构建的协议允许使消息边界在语义上变得重要。然而,一些WebSocket的用户可能希望将套接字视为字节流。如果您知道发送端不会在消息边界上放置重要性,并且您想处理不考虑这些边界的字节流,请尝试 ws_stream_tungstenite
,它是基于这个crate构建的。
性能如何?
本质上,async-tungstenite
是 tungstenite
的包装器,因此性能受限于 tungstenite
的性能。 tungstenite
的性能相当不错(它已被用于实时通信软件、视频会议等实际生产环境中),但它目前绝对不是世界上性能最快的WebSocket库。
如果性能对您至关重要(尤其是如果您发送 大消息),那么您可能需要检查其他已设计为高性能的库,或者您可以提交一个PR来改进 tungstenite
的性能!
我们了解 tungstenite
和 async-tungstenite
需要的一些更改,以便填补 tungstenite
和更高性能的库(如 fastwebsockets
)之间约30%的性能差距,但我们还没有着手做这件事,因为原始作者设计库时没有这个需求。在过去的几年中,我们合并了由Rust用户社区提交的多个性能改进,这些社区用户帮助提高了这个库的性能!有关待解决的问题/改进的简要总结,请参阅 评论。
tokio-tungstenite
最初这个crate是作为 tokio-tungstenite 的分支创建的,并移植到 futures
crate的特性和之上。在此基础上添加了与 async-std、tokio 和 gio 的集成。
依赖关系
约2-17MB
约244K SLoC