tokio-websockets

High performance, strict, tokio-util based websockets implementation.

Why use tokio-websockets?

Feature flags

Feature flags in tokio-websockets are added to allow tailoring it to your needs.

TLS support is supported via any of the following feature flags:

One SHA1 implementation is required, usually provided by the TLS implementation:

The client feature requires enabling one random number generator:

Example

This is a simple websocket echo server without any proper error handling.

More examples can be found in the examples folder.

```rust use futuresutil::{SinkExt, StreamExt}; use http::Uri; use tokio::net::TcpListener; use tokiowebsockets::{ClientBuilder, Error, Message, ServerBuilder};

[tokio::main]

async fn main() -> Result<(), Error> { let listener = TcpListener::bind("127.0.0.1:3000").await?;

tokio::spawn(async move { while let Ok((stream, )) = listener.accept().await { let mut wsstream = ServerBuilder::new() .accept(stream) .await?;

  tokio::spawn(async move {
    // Just an echo server, really
    while let Some(Ok(msg)) = ws_stream.next().await {
      if msg.is_text() || msg.is_binary() {
        ws_stream.send(msg).await?;
      }
    }

    Ok::<_, Error>(())
  });
}

Ok::<_, Error>(())

});

let uri = Uri::fromstatic("ws://127.0.0.1:3000"); let (mut client, _) = ClientBuilder::fromuri(uri).connect().await?;

client.send(Message::text(String::from("Hello world!"))).await?;

while let Some(Ok(msg)) = client.next().await { if let Some(text) = msg.astext() { asserteq!(text, "Hello world!"); // We got one message, just stop now client.close().await?; } }

Ok(()) } ```

MSRV

The current MSRV for all feature combinations is Rust 1.64.

Caveats / Limitations / ToDo

Websocket compression is currently unsupported.