https://github.com/gothack/tokio-stream-multiplexor
Shovel multiple inner streams down the same outer pipe
https://github.com/gothack/tokio-stream-multiplexor
multiplexing rust tokio
Last synced: 21 days ago
JSON representation
Shovel multiple inner streams down the same outer pipe
- Host: GitHub
- URL: https://github.com/gothack/tokio-stream-multiplexor
- Owner: GothAck
- License: mit
- Created: 2021-11-21T15:14:19.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2022-12-27T02:30:19.000Z (over 2 years ago)
- Last Synced: 2025-04-23T03:44:05.646Z (26 days ago)
- Topics: multiplexing, rust, tokio
- Language: Rust
- Homepage:
- Size: 89.8 KB
- Stars: 4
- Watchers: 2
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://app.travis-ci.com/GothAck/tokio-stream-multiplexor)
[](https://github.com/GothAck/tokio-stream-multiplexor/actions/workflows/rust.yml)


# Tokio Stream Multiplexor
TL;DR: Multiplex multiple streams over a single stream. Has a TcpListener / TcpSocket style interface, and uses u16 ports similar to TCP itself.
```toml
[dependencies]
foo = "1.2.3"
```## Why?
Because sometimes you wanna cram as much shite down one TCP stream as you possibly can, rather than have your application connect with multiple ports.
## But Whyyyyyy?
Because I needed it. Inspired by [async-smux](https://github.com/black-binary/async-smux), written for [Tokio](https://tokio.rs/).
## What about performance?
Doesn't this whole protocol in a protocol thing hurt perf?Sure, but take a look at the benches:
```rust
throughput/tcp time: [28.968 ms 30.460 ms 31.744 ms]
thrpt: [7.8755 GiB/s 8.2076 GiB/s 8.6303 GiB/s]throughput/mux time: [122.24 ms 135.96 ms 158.80 ms]
thrpt: [1.5743 GiB/s 1.8388 GiB/s 2.0451 GiB/s]
```Approximately 4.5 times slower than TCP, but still able to shovel 1.8 GiB/s of shite... Seems alright to me. (Numbers could possibly be improved with some tuning of the config params too.)