tokio_smux 0.2.0

Smux protocol in Rust. Provide multiplexing for reliable streams.
Documentation
use tokio::net::TcpListener;
use tokio_smux::{Session, SmuxConfig};

#[tokio::main]
async fn main() {
  let listener = TcpListener::bind("0.0.0.0:3100").await.unwrap();
  loop {
    let (client, _) = listener.accept().await.unwrap();
    let mut session = Session::server(client, SmuxConfig::default()).unwrap();

    tokio::spawn(async move {
      loop {
        let mut stream = session.accept_stream().await.unwrap();
        println!("[server] accept stream {}", stream.sid());

        tokio::spawn(async move {
          let data = stream.recv_message().await.unwrap();
          if data.is_none() {
            println!("[server] stream fin {}", stream.sid());
            return;
          }

          println!("[serveri] receive client data len {}", data.unwrap().len())
        });
      }
    });
  }
}