#multiplexing #muxing #async-io #tokio #smux

tokio_smux

Rust 中的 Smux 协议。提供可靠流的复用。

3 个不稳定版本

0.2.0 2024年1月20日
0.1.1 2024年1月13日
0.1.0 2024年1月13日

#11 in #multiplexing

MIT 许可证

55KB
1.5K SLoC

tokio_smux

Build And Test crates.io

Tokio_smux 是 Rust 中 smux 的实现,smux 是 Golang 中的一个流复用库。

Tokio_smux 可以与 tokio 的 TcpStreamKcpStream 一起使用。它也可以与任何实现了 tokio 的 AsyncReadAsyncWrite 特性的流一起使用。

文档

https://docs.rs/tokio_smux

使用示例

请参阅 示例

Smux 协议实现

版本 2 的 smux 协议尚不支持。

为什么 tokio_smux 的 Stream 没有直接实现 AsyncReadAsyncWrite 呢?

因为 smux 协议使用帧,意味着所有传输的用户数据都封装在固定长度的帧中。类似于 websocket 协议。

使用帧有其优点:它维护了消息边界。例如,您可以向远程发送多个单字节数据消息,并在远程逐个接收它们。

仍然可以通过封装当前 Stream 的 API 来提供 AsyncReadAsyncWrite。然而,这种方法引入了额外的开销,并丢失了消息边界。

依赖项

~4–16MB
~148K SLoC