| Crates.io | axum-tws |
| lib.rs | axum-tws |
| version | 0.5.0 |
| created_at | 2024-02-23 23:40:38.655927+00 |
| updated_at | 2025-01-16 23:01:03.788572+00 |
| description | A high-performance WebSocket backend for axum powered by tokio-websockets. |
| homepage | |
| repository | https://github.com/robertwayne/axum-tws |
| max_upload_size | |
| id | 1151079 |
| size | 59,260 |
axum-tws is an alternative WebSocket extractor for
axum using
tokio-websockets as the
underlying WebSocket library instead of tungstenite.
It is not a complete drop-in replacement and has no intention to be one. While
your upgrade handler will look the same, working with Message types in
tokio-websockets is slightly different from tungstenite. Please refer to the
tokio-websockets
documentation for
detailed information, or take a look at the example below.
Much of the code has been ported directly from the axum::extract::ws module - all credit goes to the original authors.
Run cargo add axum-tws to add the library to your project.
If you have cloned the axum-tws repository, you can run the echo_server example with the
command cargo run --example echo_server. You can then connect to it with wscat or similar on
127.0.0.1:3000/ws.
use axum::{response::Response, routing::get, Router};
use axum_tws::{WebSocket, WebSocketUpgrade};
#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let listener = tokio::net::TcpListener::bind("127.0.0.1:3000").await?;
axum::serve(listener, Router::new().route("/ws", get(handle_upgrade))).await?;
Ok(())
}
async fn handle_upgrade(ws: WebSocketUpgrade) -> Response {
ws.on_upgrade({
move |socket| async {
if let Err(e) = handle_ws(socket).await {
println!("websocket error: {:?}", e);
}
}
})
}
async fn handle_ws(mut socket: WebSocket) -> Result<(), Box<dyn std::error::Error>> {
while let Some(Ok(msg)) = socket.recv().await {
if msg.is_text() {
socket.send(msg).await?;
}
}
Ok(())
}
| Flag | Default | Description |
|---|---|---|
http2 |
Disabled | Adds support for WebSockets over HTTP/2 |
Contributions are always welcome! If you have an idea for a feature or find a bug, let me know. PR's are appreciated, but if it's not a small change, please open an issue first so we're all on the same page!
axum-tws is dual-licensed under either
at your option.