1 个不稳定版本
0.1.0 | 2023年11月26日 |
---|
#477 在 #websocket
170KB
3.5K 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().unwrap();
// We do not want to send back ping/pong messages.
if msg.is_binary() || msg.is_text() {
websocket.send(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测试套件。它还受到内部单元测试以及尽可能的覆盖。
贡献
请在此处报告错误并提交功能请求 此处。
依赖项
~0.8–12MB
~166K SLoC