Struct tide_websockets::WebSocket [−][src]
pub struct WebSocket<S, H> { /* fields omitted */ }
Expand description
endpoint/middleware handler for websockets in tide
This can either be used as a middleware or as an
endpoint. Regardless of which approach is taken, the handler
function provided to WebSocket::new
is only called if the
request correctly negotiates an upgrade to the websocket protocol.
As a middleware
If used as a middleware, the endpoint will be executed if the request is not a websocket upgrade.
Example
use async_std::prelude::*; use tide_websockets::{Message, WebSocket}; #[async_std::main] async fn main() -> Result<(), std::io::Error> { let mut app = tide::new(); app.at("/ws") .with(WebSocket::new(|_request, mut stream| async move { while let Some(Ok(Message::Text(input))) = stream.next().await { let output: String = input.chars().rev().collect(); stream .send_string(format!("{} | {}", &input, &output)) .await?; } Ok(()) })) .get(|_| async move { Ok("this was not a websocket request") }); app.listen("127.0.0.1:8080").await?; Ok(()) }
As an endpoint
If used as an endpoint but the request is
not a websocket request, tide will reply with a 426 Upgrade Required
status code.
example
use async_std::prelude::*; use tide_websockets::{Message, WebSocket}; #[async_std::main] async fn main() -> Result<(), std::io::Error> { let mut app = tide::new(); app.at("/ws") .get(WebSocket::new(|_request, mut stream| async move { while let Some(Ok(Message::Text(input))) = stream.next().await { let output: String = input.chars().rev().collect(); stream .send_string(format!("{} | {}", &input, &output)) .await?; } Ok(()) })); app.listen("127.0.0.1:8080").await?; Ok(()) }
Implementations
impl<S, H, Fut> WebSocket<S, H> where
S: Send + Sync + Clone + 'static,
H: Fn(Request<S>, WebSocketConnection) -> Fut + Sync + Send + 'static,
Fut: Future<Output = Result<()>> + Send + 'static,
[src]
impl<S, H, Fut> WebSocket<S, H> where
S: Send + Sync + Clone + 'static,
H: Fn(Request<S>, WebSocketConnection) -> Fut + Sync + Send + 'static,
Fut: Future<Output = Result<()>> + Send + 'static,
[src]pub fn with_protocols(self, protocols: &[&str]) -> Self
[src]
pub fn with_protocols(self, protocols: &[&str]) -> Self
[src]protocols
is a sequence of known protocols. On successful handshake,
the returned response headers contain the first protocol in this list
which the server also knows.
Trait Implementations
impl<H, S, Fut> Endpoint<S> for WebSocket<S, H> where
H: Fn(Request<S>, WebSocketConnection) -> Fut + Sync + Send + 'static,
Fut: Future<Output = Result<()>> + Send + 'static,
S: Send + Sync + Clone + 'static,
[src]
impl<H, S, Fut> Endpoint<S> for WebSocket<S, H> where
H: Fn(Request<S>, WebSocketConnection) -> Fut + Sync + Send + 'static,
Fut: Future<Output = Result<()>> + Send + 'static,
S: Send + Sync + Clone + 'static,
[src]impl<H, S, Fut> Middleware<S> for WebSocket<S, H> where
H: Fn(Request<S>, WebSocketConnection) -> Fut + Sync + Send + 'static,
Fut: Future<Output = Result<()>> + Send + 'static,
S: Send + Sync + Clone + 'static,
[src]
impl<H, S, Fut> Middleware<S> for WebSocket<S, H> where
H: Fn(Request<S>, WebSocketConnection) -> Fut + Sync + Send + 'static,
Fut: Future<Output = Result<()>> + Send + 'static,
S: Send + Sync + Clone + 'static,
[src]Auto Trait Implementations
impl<S, H> RefUnwindSafe for WebSocket<S, H> where
H: RefUnwindSafe,
S: RefUnwindSafe,
H: RefUnwindSafe,
S: RefUnwindSafe,
impl<S, H> Send for WebSocket<S, H> where
H: Send + Sync,
S: Send,
H: Send + Sync,
S: Send,
impl<S, H> Sync for WebSocket<S, H> where
H: Send + Sync,
S: Sync,
H: Send + Sync,
S: Sync,
impl<S, H> Unpin for WebSocket<S, H> where
S: Unpin,
S: Unpin,
impl<S, H> UnwindSafe for WebSocket<S, H> where
H: RefUnwindSafe,
S: UnwindSafe,
H: RefUnwindSafe,
S: UnwindSafe,
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]pub fn borrow_mut(&mut self) -> &mut T
[src]
pub fn borrow_mut(&mut self) -> &mut T
[src]Mutably borrows from an owned value. Read more
impl<T> Same<T> for T
impl<T> Same<T> for T
type Output = T
type Output = T
Should always be Self
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,