#rustls #tls #tungstenite #protocols #native-tls #io

ng-tungstenite

Nextgraph.org 的 tungstenite 的分支

1 个不稳定版本

0.19.0 2024 年 5 月 22 日

#85 in WebSocket


3 个 Crates 中使用(通过 ng-async-tungstenite

MIT/Apache

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

MIT licensed Apache-2.0 licensed Crates.io Build Status

文档

介绍

此库提供了 WebSocket 的实现,RFC6455。它允许同步(如 TcpStream)和异步使用,并且易于集成到任何第三方事件循环中,包括 MIO。API 设计抽象了 WebSocket 协议的所有内部结构,但仍然使它们可供那些想要完全控制网络的人使用。

为什么选择 Tungstenite?

它是以前 WS2 的第二个 WS 实现。WS2 是二硫化钨的化学式,钨矿。

功能

Tungstenite 提供了 WebSocket 规范的完整实现。TLS 在所有平台上都支持使用 native-tlsrustls。以下功能可用:

  • 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