Skip to main content

Crate ws_kit

Crate ws_kit 

Source
Expand description

§ws-kit

Generic authenticated typed WebSocket toolkit.

Provides:

§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");

§Binary messages (0.4.0)

use ws_kit::codec::Frame;
use ws_kit::room::RoomManager;

let m = RoomManager::new();
let room = m.get_or_create("media");
let mut rx = room.subscribe();
room.broadcast(Frame::binary(vec![0xde_u8, 0xad, 0xbe, 0xef])).unwrap();
assert!(rx.recv().await.unwrap().is_binary());

Binary payloads are carried opaquely — ws-kit never parses them as text/JSON; codec::Frame::Text and codec::Frame::Binary are kept distinct end to end. Authentication (TokenExtractor) operates on the HTTP upgrade request and is frame-kind-agnostic.

§Features

  • axum (default): enables axum WebSocket and tower deps, and TokenExtractor::extract_token(&Parts, _)
  • compression: application-layer DEFLATE for Frame payloads (see compression for the layer assessment)
  • redis: multi-node room fan-out via redis_rooms::RedisRoomRegistry (at-most-once pub/sub)
  • metrics: emit stats counters through the metrics facade
  • tracing: deprecated no-op kept for 0.3.x compatibility

Re-exports§

pub use codec::Codec;
pub use codec::Frame;
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 origin::normalize_origin;
pub use origin::origin_allowed;
pub use room::Room;
pub use room::RoomManager;
pub use room::RoomRegistry;
pub use stats::RoomStats;
pub use stats::Stats;
pub use stats::StatsRecorder;
pub use origin::origin_allowed_in_parts;axum
pub use compression::extension_accepted;compression
pub use compression::CompressionConfig;compression
pub use compression::FrameCompressor;compression
pub use redis_rooms::RedisRoomRegistry;redis

Modules§

codec
Message codec.
compressioncompression
Application-layer payload compression.
config
Configuration for WebSocket infrastructure.
error
Error types for ws-kit.
extractor
Token extraction for WebSocket authentication.
hub
Generic broadcast hub.
origin
Origin validation for WebSocket upgrades (Cross-Site WebSocket Hijacking defense).
redis_roomsredis
Multi-node room fan-out over Redis pub/sub (redis feature, off by default).
room
Room-based group messaging.
stats
Backpressure and traffic metrics.