pub struct Session { /* private fields */ }Expand description
SPDY/3.1 session: one or more transport connections carrying paired streams to a SPDY peer.
When pool_size > 1, each transport gets its own reader/writer task
pair and streams are distributed via power-of-two-choices across the
pool for parallel writes at high concurrency. Pool size 1 keeps the
original single-connection behaviour.
§Transport break contract
When a transport closes or errors, every stream on that handle
receives BrokenPipe. The session doesn’t reconnect. Layers above
(typically a forwarder) open a fresh session on transport failure.
Implementations§
Source§impl Session
impl Session
Sourcepub async fn with_config<W, R>(
connections: Vec<(W, R)>,
cancel: CancellationToken,
config: MuxConfig,
) -> Result<Self, Error>where
W: WsFrameWriter + 'static,
R: WsFrameReader + 'static,
pub async fn with_config<W, R>(
connections: Vec<(W, R)>,
cancel: CancellationToken,
config: MuxConfig,
) -> Result<Self, Error>where
W: WsFrameWriter + 'static,
R: WsFrameReader + 'static,
Create a session with explicit configuration from pre-split WebSocket transport pairs.
Each (writer, reader) pair gets its own MuxHandle with independent
reader/writer tasks. All handshakes and initial PING roundtrips
complete before this method returns. Streams are then distributed
round-robin across the pool.
§Graceful degradation
If some connections fail their initial PING but at least one succeeds, the session proceeds with the healthy subset. Only returns an error when ALL connections fail (or the input is empty).
Sourcepub async fn open_stream_pair(
&self,
error_headers: Vec<(String, String)>,
data_headers: Vec<(String, String)>,
) -> Result<Stream, Error>
pub async fn open_stream_pair( &self, error_headers: Vec<(String, String)>, data_headers: Vec<(String, String)>, ) -> Result<Stream, Error>
Open a paired stream using power-of-two-choices with Peak-EWMA load estimation.
Picks two random live handles, compares their cost (inflight × RTT estimate), and opens on the cheaper one. Falls back to a round-robin scan when both picks are at capacity or closed.
error_headers and data_headers are passed verbatim to the codec
as the SYN_STREAM header block for the respective stream. The
session doesn’t interpret them.
Sourcepub fn operating_capacity(&self) -> usize
pub fn operating_capacity(&self) -> usize
Total operating capacity across all live pool members (scheduling cap).
pub fn in_use(&self) -> usize
pub fn available(&self) -> usize
pub fn is_full(&self) -> bool
Sourcepub fn is_drained(&self) -> bool
pub fn is_drained(&self) -> bool
Returns true when all underlying WebSockets have closed.