- WsTimeouts { idle, write } request extension mirrors ChannelsPolicy:
a deployment layers it on a WS route (bare-registry routes included)
to set the pump knobs per route
- precedence: extension present replaces the router state entirely;
absent falls back to SessionState (adapter-configured idle) and the
crate default write window — a Default impl never clobbers the
adapter-configured idle knob
- upgrade.rs module + handler docs now state the real defaults for
bare-registry routes (60 s idle + 60 s write, 64-session semaphore,
handler-private WsSessions) and the extension surface
- split_ws_to_bytes_idle_with_write exposes the WS-18 write window to
run_channels_session; acceptance test drives a bare-registry route
with a 150 ms extension idle window (1001 eviction observed)
Verification: scripts/verify.sh OK (343 passed), test-support suite
ok, clippy -D warnings clean, fmt clean
34 lines
1.4 KiB
Rust
34 lines
1.4 KiB
Rust
//! WebSocket subsystem: the browser bidirectional path
|
|
//! (ADR-067, `docs/architecture/decisions`).
|
|
//!
|
|
//! A WS session carries the **channels protocol**: the 8-byte chunk
|
|
//! header multiplexes N logical channels over the WS binary message
|
|
//! stream; channel 0 is pre-negotiated as `alk/call` and dispatched by
|
|
//! the shared `Dispatcher`. The WS↔byte-stream adapter (`byte_adapter`)
|
|
//! is the single seam between axum's WS and
|
|
//! alkcall's byte-oriented channels machinery — shared with the
|
|
//! `from_wss` consumer path ([ADR-070]).
|
|
|
|
pub mod byte_adapter;
|
|
pub mod upgrade;
|
|
|
|
pub use byte_adapter::{
|
|
split_ws_to_bytes, split_ws_to_bytes_idle, split_ws_to_bytes_idle_with_write, WsByteStream,
|
|
WsPumps, DEFAULT_WS_IDLE_TIMEOUT, DEFAULT_WS_WRITE_TIMEOUT, INBOUND_WS_FRAME_CAP,
|
|
INBOUND_WS_MESSAGE_CAP, MAX_CHUNK_LEN, PENDING_BUFFER_CAP, WS_GOING_AWAY, WS_MESSAGE_CAP,
|
|
WS_PROTOCOL_ERROR,
|
|
};
|
|
|
|
#[cfg(any(test, feature = "wss"))]
|
|
pub use byte_adapter::split_tungstenite_to_bytes;
|
|
#[cfg(any(test, feature = "wss"))]
|
|
#[allow(unused_imports)]
|
|
pub(crate) use upgrade::adapter_install_channel_zero;
|
|
pub use upgrade::{
|
|
run_channels_session, ws_bearer_auth, ws_upgrade_handler, ChannelsPolicy, SessionState,
|
|
WsSessions, WsTimeouts, DEFAULT_WS_MAX_SESSIONS,
|
|
};
|
|
|
|
#[cfg(any(test, feature = "test-support"))]
|
|
pub use upgrade::test_support::{frame_channel0_chunk, ChunkAssembler, FrameAssembler, WsClient};
|