pub struct WebSocket { /* private fields */ }
Expand description
Manages the WebSocket connection; used to connect, send data, and receive data.
Connect with WebSocket::connect()
:
let mut ws = WebSocket::connect("wss://echo.websocket.org/").await?;
Cuustomize the handshake using a WebSocketBuilder
obtained from WebSocket::builder()
:
let mut ws = WebSocket::builder()
.add_subprotocol("wamp")
.connect("wss://echo.websocket.org")
.await?;
Use the WebSocket::send*
methods to send frames:
ws.send_text("foo".to_string()).await?;
Use WebSocket::receive()
to receive frames:
if let Frame::Text { payload: received_msg, .. } = ws.receive().await? {
// echo.websocket.org echoes text frames
assert_eq!(received_msg, "foo".to_string());
}
Close the connection with WebSocket::close()
:
ws.close(Some((1000, String::new()))).await?;
if let Frame::Close{ payload: Some((status_code, _reason)) } = ws.receive().await? {
assert_eq!(status_code, 1000);
}
§Splitting
To facilitate simulataneous reads and writes, the WebSocket
can be split
into a read half and a write half.
The read half allows frames to be received, while the write half
allows frames to be sent.
If the read half receives a Ping or Close frame, it needs to send a
Pong or echo the Close frame and close the WebSocket, respectively.
The write half is notified of these events, but it cannot act on them
unless it is flushed. Events can be explicitly flush
ed,
but sending a frame will also flush events. If frames are not being
sent frequently, consider explicitly flushing events.
Flushing is done automatically if you are using the the WebSocket
type by itself.
Implementations§
Source§impl WebSocket
impl WebSocket
Sourcepub fn builder() -> WebSocketBuilder
pub fn builder() -> WebSocketBuilder
Constructs a WebSocketBuilder
, which can be used to customize
the WebSocket handshake.
Sourcepub async fn connect(url: &str) -> Result<Self, WebSocketError>
pub async fn connect(url: &str) -> Result<Self, WebSocketError>
Connects to a URL (and performs the WebSocket handshake).
Sourcepub async fn receive(&mut self) -> Result<Frame, WebSocketError>
pub async fn receive(&mut self) -> Result<Frame, WebSocketError>
Receives a Frame
over the WebSocket connection.
If the received frame is a Ping frame, a Pong frame will be sent. If the received frame is a Close frame, an echoed Close frame will be sent and the WebSocket will close.
Sourcepub async fn receive_without_handling(
&mut self,
) -> Result<Frame, WebSocketError>
pub async fn receive_without_handling( &mut self, ) -> Result<Frame, WebSocketError>
Receives a Frame
over the WebSocket connection without handling incoming frames.
For example, receiving a Ping frame will not queue a Pong frame to be sent,
and receiving a Close frame will not queue a Close frame to be sent nor close
the connection.
To automatically handle incoming frames, use the receive()
method instead.
Sourcepub async fn send(&mut self, frame: Frame) -> Result<(), WebSocketError>
pub async fn send(&mut self, frame: Frame) -> Result<(), WebSocketError>
Sends an already constructed Frame
over the WebSocket connection.
Sourcepub async fn send_text(&mut self, payload: String) -> Result<(), WebSocketError>
pub async fn send_text(&mut self, payload: String) -> Result<(), WebSocketError>
Sends a Text frame over the WebSocket connection, constructed
from passed arguments. continuation
will be false
and fin
will be true
.
To use a custom continuation
or fin
, construct a Frame
and use
WebSocket::send()
.
Sourcepub async fn send_binary(
&mut self,
payload: Vec<u8>,
) -> Result<(), WebSocketError>
pub async fn send_binary( &mut self, payload: Vec<u8>, ) -> Result<(), WebSocketError>
Sends a Binary frame over the WebSocket connection, constructed
from passed arguments. continuation
will be false
and fin
will be true
.
To use a custom continuation
or fin
, construct a Frame
and use
WebSocket::send()
.
Sourcepub async fn close(
&mut self,
payload: Option<(u16, String)>,
) -> Result<(), WebSocketError>
pub async fn close( &mut self, payload: Option<(u16, String)>, ) -> Result<(), WebSocketError>
Sends a Close frame over the WebSocket connection, constructed from passed arguments, and closes the WebSocket connection. This method will attempt to wait for an echoed Close frame, which is returned.
Sourcepub async fn send_ping(
&mut self,
payload: Option<Vec<u8>>,
) -> Result<(), WebSocketError>
pub async fn send_ping( &mut self, payload: Option<Vec<u8>>, ) -> Result<(), WebSocketError>
Sends a Ping frame over the WebSocket connection, constructed from passed arguments.
Sourcepub async fn send_pong(
&mut self,
payload: Option<Vec<u8>>,
) -> Result<(), WebSocketError>
pub async fn send_pong( &mut self, payload: Option<Vec<u8>>, ) -> Result<(), WebSocketError>
Sends a Pong frame over the WebSocket connection, constructed from passed arguments.
Sourcepub async fn shutdown(&mut self) -> Result<(), WebSocketError>
pub async fn shutdown(&mut self) -> Result<(), WebSocketError>
Shuts down the WebSocket connection without sending a Close frame.
It is recommended to use the close()
method instead.
Sourcepub fn split(self) -> (WebSocketReadHalf, WebSocketWriteHalf)
pub fn split(self) -> (WebSocketReadHalf, WebSocketWriteHalf)
Splits the WebSocket into a read half and a write half, which can be used separately. Accepted subprotocol and handshake response headers data will be lost.
Sourcepub fn join(
read_half: WebSocketReadHalf,
write_half: WebSocketWriteHalf,
) -> Self
pub fn join( read_half: WebSocketReadHalf, write_half: WebSocketWriteHalf, ) -> Self
Joins together a split read half and write half to reconstruct a WebSocket.
Sourcepub fn accepted_subprotocol(&self) -> &Option<String>
pub fn accepted_subprotocol(&self) -> &Option<String>
Returns the subprotocol that was accepted by the server during the handshake,
if any. This data will be lost if the WebSocket is split
.