CompressedWebSocketStream

Struct CompressedWebSocketStream 

Source
pub struct CompressedWebSocketStream<S> { /* private fields */ }
Expand description

A WebSocket stream with permessage-deflate compression (RFC 7692)

This type mirrors WebSocketStream but uses CompressedProtocol for automatic compression/decompression of messages.

Implementations§

Source§

impl<S> CompressedWebSocketStream<S>
where S: AsyncRead + AsyncWrite + Unpin,

Source

pub fn server(inner: S, config: Config, deflate_config: DeflateConfig) -> Self

Create a new compressed WebSocket stream for server role

Source

pub fn client(inner: S, config: Config, deflate_config: DeflateConfig) -> Self

Create a new compressed WebSocket stream for client role

Source

pub fn is_closed(&self) -> bool

Check if the connection is closed

Source

pub fn is_backpressured(&self) -> bool

Check if backpressure should be applied

Source

pub fn write_buffer_len(&self) -> usize

Get the current write buffer length

Source

pub async fn close(&mut self, code: u16, reason: &str) -> Result<()>

Send a close frame

Source§

impl<S> CompressedWebSocketStream<S>
where S: AsyncRead + AsyncWrite + Unpin,

Source

pub fn split(self) -> (CompressedSplitReader<S>, CompressedSplitWriter<S>)

Split the compressed WebSocket stream into separate read and write halves

This allows TRUE concurrent reading and writing from different tasks with ZERO lock contention. The underlying TCP stream is split at the OS level for maximum performance.

Both halves maintain compression/decompression state independently:

  • Reader has the decoder for decompressing incoming messages
  • Writer has the encoder for compressing outgoing messages
§Example
let (mut reader, mut writer) = compressed_ws.split();

// Read in one task - NEVER blocks writer
tokio::spawn(async move {
    while let Some(msg) = reader.next().await {
        println!("Got: {:?}", msg);
    }
});

// Write in another - NEVER blocks reader
writer.send(Message::Text("Hello".into())).await?;

Trait Implementations§

Source§

impl<S> Sink<Message> for CompressedWebSocketStream<S>
where S: AsyncRead + AsyncWrite + Unpin,

Available on crate feature permessage-deflate only.
Source§

type Error = Error

The type of value produced by the sink when an error occurs.
Source§

fn poll_ready(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Result<()>>

Attempts to prepare the Sink to receive a value. Read more
Source§

fn start_send(self: Pin<&mut Self>, item: Message) -> Result<()>

Begin the process of sending a value to the sink. Each call to this function must be preceded by a successful call to poll_ready which returned Poll::Ready(Ok(())). Read more
Source§

fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>

Flush any remaining output from this sink. Read more
Source§

fn poll_close(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>

Flush any remaining output and close this sink, if necessary. Read more
Source§

impl<S> Stream for CompressedWebSocketStream<S>
where S: AsyncRead + AsyncWrite + Unpin,

Available on crate feature permessage-deflate only.
Source§

type Item = Result<Message, Error>

Values yielded by the stream.
Source§

fn poll_next( self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll<Option<Self::Item>>

Attempt to pull out the next value of this stream, registering the current task for wakeup if the value is not yet available, and returning None if the stream is exhausted. Read more
Source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the stream. Read more
Source§

impl<'__pin, S> Unpin for CompressedWebSocketStream<S>
where PinnedFieldsOf<__Origin<'__pin, S>>: Unpin,

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, 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> Same for T

Source§

type Output = T

Should always be Self
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<S, T, E> TryStream for S
where S: Stream<Item = Result<T, E>> + ?Sized,

Source§

type Ok = T

The type of successful values yielded by this future
Source§

type Error = E

The type of failures yielded by this future
Source§

fn try_poll_next( self: Pin<&mut S>, cx: &mut Context<'_>, ) -> Poll<Option<Result<<S as TryStream>::Ok, <S as TryStream>::Error>>>

Poll this TryStream as if it were a Stream. Read more