| Crates.io | fast_websocket_client |
| lib.rs | fast_websocket_client |
| version | 0.4.0 |
| created_at | 2023-08-21 17:40:58.076956+00 |
| updated_at | 2025-07-20 15:29:58.72939+00 |
| description | Tokio-native WebSocket client for Rust. High-throughput, low-latency, callback-driven, proxy-ready. |
| homepage | |
| repository | https://github.com/Osteoporosis/fast_websocket_client/ |
| max_upload_size | |
| id | 950242 |
| size | 142,868 |
Tokio-native WebSocket client for Rust – high-throughput, low-latency, callback-driven, proxy-ready.
Supports two modes of operation:
Quick Example: examples/async_callback_client.rs
tokiofastwebsocketscargo add fast_websocket_client
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_open(|_| async move {
println!("[OPEN] WebSocket connection opened.");
})
.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(2)).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(2)).await;
}
ws.close().await;
ws.await_shutdown().await;
Ok(())
}
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(())
}
Clone the repo and run:
cargo run --example wss_client
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.
💡 Actively maintained - contributions are welcome!