#websocket-server #async-std #async-await #客户端-服务器 #native-tls #非阻塞

veilid-async-tungstenite

为Tungstenite提供异步绑定,Tungstenite是一个基于流的轻量级WebSocket实现

1个不稳定版本

0.23.0 2023年11月7日

#224 in WebSocket

Download history 58/week @ 2024-03-11 44/week @ 2024-03-18 204/week @ 2024-03-25 119/week @ 2024-04-01 51/week @ 2024-04-08 117/week @ 2024-04-15 51/week @ 2024-04-22 307/week @ 2024-04-29 55/week @ 2024-05-06 85/week @ 2024-05-13 85/week @ 2024-05-20 51/week @ 2024-05-27 194/week @ 2024-06-03 113/week @ 2024-06-10 92/week @ 2024-06-17 91/week @ 2024-06-24

492次每月下载
8个Crate中使用(通过veilid-core

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是什么?

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

如果性能对您至关重要(特别是如果您发送大量的消息),那么您可能需要检查其他为性能而设计的库,或者您可以针对 tungstenite 提交PR以改进性能!

我们了解 tungsteniteasync-tungstenite 需要进行的更改,以便填补 tungstenite 和更高效的库(如 fastwebsockets)之间大约30%的性能差距,但我们尚未着手处理这些问题,因为它们不符合原始作者设计的库的使用场景。在过去几年中,我们已经合并了由出色的Rust用户社区提交的几个性能改进,这些用户帮助改进了库!有关待解决的问题/改进的快速总结,请参阅 该评论

tokio-tungstenite

最初,这个crate被创建为 tokio-tungstenite 的分支,并将其移植到 futures crate 的特质。在此基础上增加了async-std、tokio和gio的集成。

依赖项

~2–17MB
~243K SLoC