Crates.io | tokio_smux |
lib.rs | tokio_smux |
version | 0.2.0 |
source | src |
created_at | 2024-01-13 11:21:37.483603 |
updated_at | 2024-01-20 07:10:14.539213 |
description | Smux protocol in Rust. Provide multiplexing for reliable streams. |
homepage | |
repository | https://github.com/oyyd/tokio_smux |
max_upload_size | |
id | 1098471 |
size | 67,608 |
Tokio_smux is an implementation of smux in Rust, which is a stream multiplexing library in Golang.
Tokio_smux can work with tokio TcpStream and KcpStream. It can also be used with any streams that implement tokio's AsyncRead
and AsyncWrite
traits.
See examples
The smux protocl version 2 is not yet supported.
Why doesn't Stream
of tokio_smux impl AsyncRead
and AysncWrite
itself?
Becuase the smux protocol uses frames, means all user data transfered is wrapped in frames of fixed lengths. Similar to the websocket protocol.
Using frames has its benifits: it maintains message boundaries. For example, you can send many one byte data messages to the remote, and receive them one by one in the remote.
It's still feasible to wrap the current APIs of Stream
to provide AsyncRead
and AsyncWrite
. However, this approach introduces additional overhead and loses message boundaries.