#async-std #async-await #native-tls #tokio #io #web

async-tungstenite

异步绑定Tungstenite,轻量级的基于流的WebSocket实现

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

Download history 54466/week @ 2024-05-04 59475/week @ 2024-05-11 71186/week @ 2024-05-18 63061/week @ 2024-05-25 64725/week @ 2024-06-01 61461/week @ 2024-06-08 57753/week @ 2024-06-15 67348/week @ 2024-06-22 54253/week @ 2024-06-29 61687/week @ 2024-07-06 63770/week @ 2024-07-13 67338/week @ 2024-07-20 60081/week @ 2024-07-27 53110/week @ 2024-08-03 57691/week @ 2024-08-10 49048/week @ 2024-08-17

每月下载量 231,924
用于 293 个库 (125直接使用)

MIT 许可证

98KB
2K SLoC

async-tungstenite

async-stdtokiogio以及任何std Future运行时提供异步WebSocket。

MIT licensed Crates.io Build Status

文档

用法

在您的Cargo.toml中添加以下内容

[dependencies]
async-tungstenite = "*"

查看examples/目录中的客户端和服务器示例。如果您没有相关经验,您可能还需要熟悉async-stdtokio

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-tungstenitetungstenite 的包装器,因此性能受限于 tungstenite 的性能。 tungstenite 的性能相当不错(它已被用于实时通信软件、视频会议等实际生产环境中),但它目前绝对不是世界上性能最快的WebSocket库。

如果性能对您至关重要(尤其是如果您发送 大消息),那么您可能需要检查其他已设计为高性能的库,或者您可以提交一个PR来改进 tungstenite 的性能!

我们了解 tungsteniteasync-tungstenite 需要的一些更改,以便填补 tungstenite 和更高性能的库(如 fastwebsockets)之间约30%的性能差距,但我们还没有着手做这件事,因为原始作者设计库时没有这个需求。在过去的几年中,我们合并了由Rust用户社区提交的多个性能改进,这些社区用户帮助提高了这个库的性能!有关待解决的问题/改进的简要总结,请参阅 评论

tokio-tungstenite

最初这个crate是作为 tokio-tungstenite 的分支创建的,并移植到 futures crate的特性和之上。在此基础上添加了与 async-std、tokio 和 gio 的集成。

依赖关系

约2-17MB
约244K SLoC