Expand description
§ws-kit
Generic authenticated typed WebSocket toolkit.
Provides:
config::WsConfig— heartbeat, broadcast capacity, connection limits with builder.hub::BroadcastHub— typedbroadcast::Sender<T>wrapper with connection counting, generic overT: Clone + Serialize.room::RoomManager/room::Room— DashMap-backed room isolation with participant tracking.extractor::TokenExtractor— configurable token extraction (Authorization: Bearer,?token=,?access_token=,Cookie).codec::Codec/codec::JsonCodec— JSON encode/decode via serde.
§Quick start
use ws_kit::{config::WsConfig, hub::BroadcastHub, room::RoomManager, codec::Codec};
use serde::{Serialize, Deserialize};
#[derive(Clone, Serialize, Deserialize, Debug, PartialEq)]
struct ChatMsg { user: String, body: String }
let hub = BroadcastHub::<ChatMsg>::new(1024);
let mut rx = hub.subscribe();
hub.broadcast(ChatMsg { user: "alice".into(), body: "hi".into() }).unwrap();
let msg = rx.recv().await.unwrap();
assert_eq!(msg.user, "alice");§Features
std(default): enablesstdsupport forthiserror.axum(default): enablesaxumWebSocket andtowerdeps, andTokenExtractor::extract_token(&Parts, _)tracing: enables tracing instrumentation.
Re-exports§
pub use codec::Codec;pub use codec::JsonCodec;pub use config::WsConfig;pub use config::WsConfigBuilder;pub use error::WsError;pub use extractor::TokenExtractor;pub use extractor::TokenSourceKind;pub use extractor::WsAuthError;pub use hub::BroadcastHub;pub use room::Room;pub use room::RoomManager;