1 个不稳定版本
0.19.0 | 2024 年 5 月 22 日 |
---|
#85 in WebSocket
在 3 个 Crates 中使用(通过 ng-async-tungstenite)
165KB
3K SLoC
Tungstenite
为 Rust 提供的轻量级基于流的 WebSocket 实现。
use std::net::TcpListener;
use std::thread::spawn;
use tungstenite::accept;
/// A WebSocket echo server
fn main () {
let server = TcpListener::bind("127.0.0.1:9001").unwrap();
for stream in server.incoming() {
spawn (move || {
let mut websocket = accept(stream.unwrap()).unwrap();
loop {
let msg = websocket.read_message().unwrap();
// We do not want to send back ping/pong messages.
if msg.is_binary() || msg.is_text() {
websocket.write_message(msg).unwrap();
}
}
});
}
}
查看示例部分以了解如何编写简单的客户端/服务器。
注意: tungstenite-rs
更像是一个用于构建可靠现代网络应用程序的裸骨库,使用 WebSocket。如果您正在寻找一个现代的生产就绪的“电池包括”WebSocket 库,允许您有效地使用非阻塞套接字并进行“全双工”通信,请查看 tokio-tungstenite
。
介绍
此库提供了 WebSocket 的实现,RFC6455。它允许同步(如 TcpStream)和异步使用,并且易于集成到任何第三方事件循环中,包括 MIO。API 设计抽象了 WebSocket 协议的所有内部结构,但仍然使它们可供那些想要完全控制网络的人使用。
为什么选择 Tungstenite?
它是以前 WS2 的第二个 WS 实现。WS2 是二硫化钨的化学式,钨矿。
功能
Tungstenite 提供了 WebSocket 规范的完整实现。TLS 在所有平台上都支持使用 native-tls
或 rustls
。以下功能可用:
native-tls
native-tls-vendored
rustls-tls-native-roots
rustls-tls-webpki-roots
选择适合您需求的一个。
默认情况下,没有激活 TLS 功能,因此请确保您使用 TLS 功能之一,否则您将无法与 TLS 终端进行通信。
目前不支持 permessage-deflate,但欢迎贡献 PR。
测试
Tungstenite 经过彻底测试,并通过了 WebSocket 的 Autobahn 测试套件。它还受到内部单元测试以及可能的测试覆盖。
贡献
请在此处报告错误并提供建议 here。
依赖关系
~0.8–14MB
~195K SLoC