6 releases
Uses new Rust 2024
0.3.0 | Apr 6, 2025 |
---|---|
0.2.0 | Feb 8, 2024 |
0.1.3 | Dec 22, 2023 |
0.1.2 | Aug 22, 2023 |
#73 in WebSocket
135 downloads per month
40KB
614 lines
fast_websocket_client
A blazing-fast, async-native WebSocket client for Rust, built on top of fastwebsockets
and tokio
.
Supports two modes of operation:
- ๐ High-level callback-based client for ergonomic event-driven use.
- โ๏ธ Low-level direct API for fine-tuned control with minimal dependencies.
Quick Example: examples/async_callback_client.rs
๐ฆ Features
- Async/await support via
tokio
- Built-in reconnection and ping loop
- Optional callback-driven lifecycle management
- Custom HTTP headers for handshake (e.g., Authorization)
๐ Installation
cargo add fast_websocket_client
๐ High-Level Callback API
An ergonomic, JavaScript-like API with built-in reconnect, ping, and lifecycle hooks.
// try this example with
// `cargo run --example wss_client`
use tokio::time::{Duration, sleep};
use fast_websocket_client::WebSocket;
#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), fast_websocket_client::WebSocketClientError> {
let ws = WebSocket::new("wss://echo.websocket.org").await?;
ws.on_close(|_| async move {
println!("[CLOSE] WebSocket connection closed.");
})
.await;
ws.on_message(|message| async move {
println!("[MESSAGE] {}", message);
})
.await;
sleep(Duration::from_secs(1)).await;
for i in 1..5 {
let message = format!("#{}", i);
if let Err(e) = ws.send(&message).await {
eprintln!("[ERROR] Send error: {:?}", e);
break;
}
println!("[SEND] {}", message);
sleep(Duration::from_secs(5)).await;
}
ws.close().await;
ws.await_shutdown().await;
Ok(())
}
๐งต Low-Level API
use fast_websocket_client::{connect, OpCode};
#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
let mut client = connect("wss://echo.websocket.org").await?;
client.send_string("Hello, WebSocket!").await?;
let frame = client.receive_frame().await?;
if frame.opcode == OpCode::Text {
println!("Received: {}", String::from_utf8_lossy(&frame.payload));
}
client.send_close("bye").await?;
Ok(())
}
๐งช Running the Example
Clone the repo and run:
cargo run --example wss_client
๐ Migration Guide (from 0.2.0
)
Old | New |
---|---|
client::Offline |
base_client::Offline |
client::Online |
base_client::Online |
Runtime settings via Online 's methods |
Must now be set before connect via ConnectionInitOptions .Changes to the running WebSocket take effect on the next (re)connection. |
New users: We recommend starting with the WebSocket
API for best experience.
๐ Documentation
๐ก Actively maintained โ contributions are welcome!
Dependencies
~18โ28MB
~492K SLoC