1个不稳定版本
0.23.0 | 2023年11月7日 |
---|
#224 in WebSocket
492次每月下载
在8个Crate中使用(通过veilid-core)
98KB
2K SLoC
async-tungstenite
为async-std、tokio、gio以及任何std
Future
运行时提供异步WebSocket。
用法
在您的Cargo.toml
中添加以下内容
[dependencies]
async-tungstenite = "*"
查看examples/
目录中的客户端和服务器示例。如果您对async-std或tokio没有经验,您可能需要熟悉它们。
async-tungstenite是什么?
此包基于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用户可能希望将套接字视为字节流。如果您知道发送端不重视消息边界,并且您希望处理一个不考虑这些边界的字节流,请尝试基于此crate构建的 ws_stream_tungstenite
。
它是否高效?
本质上,async-tungstenite
是 tungstenite
的包装器,因此性能受限于 tungstenite
的性能。 tungstenite
具有相当不错的性能(它已在实时通信软件、视频会议等实际生产中使用),但它绝不是目前世界上速度最快的WebSocket库。
如果性能对您至关重要(特别是如果您发送大量的消息),那么您可能需要检查其他为性能而设计的库,或者您可以针对 tungstenite
提交PR以改进性能!
我们了解 tungstenite
和 async-tungstenite
需要进行的更改,以便填补 tungstenite
和更高效的库(如 fastwebsockets
)之间大约30%的性能差距,但我们尚未着手处理这些问题,因为它们不符合原始作者设计的库的使用场景。在过去几年中,我们已经合并了由出色的Rust用户社区提交的几个性能改进,这些用户帮助改进了库!有关待解决的问题/改进的快速总结,请参阅 该评论。
tokio-tungstenite
最初,这个crate被创建为 tokio-tungstenite 的分支,并将其移植到 futures
crate 的特质。在此基础上增加了async-std、tokio和gio的集成。
依赖项
~2–17MB
~243K SLoC