Skip to main content

Session

Struct Session 

Source
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

Source

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).

Source

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.

Source

pub fn capacity(&self) -> usize

Total capacity across all live pool members (hard cap).

Source

pub fn operating_capacity(&self) -> usize

Total operating capacity across all live pool members (scheduling cap).

Source

pub fn in_use(&self) -> usize

Source

pub fn available(&self) -> usize

Source

pub fn is_full(&self) -> bool

Source

pub fn is_drained(&self) -> bool

Returns true when all underlying WebSockets have closed.

Source

pub fn cancellation_token(&self) -> CancellationToken

Source

pub async fn close(self) -> Result<(), Error>

Close the SPDY session by cancelling the mux tasks.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more