[−][src]Struct vujio_server::WebSocket
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<(), Error>> + Send + 'static,
[src]
S: Send + Sync + Clone + 'static,
H: Fn(Request<S>, WebSocketConnection) -> Fut + Sync + Send + 'static,
Fut: Future<Output = Result<(), Error>> + Send + 'static,
Trait Implementations
impl<S, H> Debug for WebSocket<S, H> where
S: Debug,
H: Debug,
[src]
S: Debug,
H: Debug,
impl<H, S, Fut> Endpoint<S> for WebSocket<S, H> where
S: Send + Sync + Clone + 'static,
H: Fn(Request<S>, WebSocketConnection) -> Fut + Sync + Send + 'static,
Fut: Future<Output = Result<(), Error>> + Send + 'static,
[src]
S: Send + Sync + Clone + 'static,
H: Fn(Request<S>, WebSocketConnection) -> Fut + Sync + Send + 'static,
Fut: Future<Output = Result<(), Error>> + Send + 'static,
pub fn call<'life0, 'async_trait>(
&'life0 self,
req: Request<S>
) -> Pin<Box<dyn Future<Output = Result<Response, Error>> + 'async_trait + Send, Global>>ⓘ where
'life0: 'async_trait,
WebSocket<S, H>: 'async_trait,
[src]
&'life0 self,
req: Request<S>
) -> Pin<Box<dyn Future<Output = Result<Response, Error>> + 'async_trait + Send, Global>>ⓘ where
'life0: 'async_trait,
WebSocket<S, H>: 'async_trait,
impl<H, S, Fut> Middleware<S> for WebSocket<S, H> where
S: Send + Sync + Clone + 'static,
H: Fn(Request<S>, WebSocketConnection) -> Fut + Sync + Send + 'static,
Fut: Future<Output = Result<(), Error>> + Send + 'static,
[src]
S: Send + Sync + Clone + 'static,
H: Fn(Request<S>, WebSocketConnection) -> Fut + Sync + Send + 'static,
Fut: Future<Output = Result<(), Error>> + Send + 'static,
pub fn handle<'life0, 'life1, 'async_trait>(
&'life0 self,
req: Request<S>,
next: Next<'life1, S>
) -> Pin<Box<dyn Future<Output = Result<Response, Error>> + 'async_trait + Send, Global>>ⓘ where
'life0: 'async_trait,
'life1: 'async_trait,
WebSocket<S, H>: 'async_trait,
[src]
&'life0 self,
req: Request<S>,
next: Next<'life1, S>
) -> Pin<Box<dyn Future<Output = Result<Response, Error>> + 'async_trait + Send, Global>>ⓘ where
'life0: 'async_trait,
'life1: 'async_trait,
WebSocket<S, H>: 'async_trait,
pub fn name(&self) -> &str
[src]
Auto Trait Implementations
impl<S, H> RefUnwindSafe for WebSocket<S, H> where
H: RefUnwindSafe,
S: RefUnwindSafe,
[src]
H: RefUnwindSafe,
S: RefUnwindSafe,
impl<S, H> Send for WebSocket<S, H> where
H: Send + Sync,
S: Send,
[src]
H: Send + Sync,
S: Send,
impl<S, H> Sync for WebSocket<S, H> where
H: Send + Sync,
S: Sync,
[src]
H: Send + Sync,
S: Sync,
impl<S, H> Unpin for WebSocket<S, H> where
S: Unpin,
[src]
S: Unpin,
impl<S, H> UnwindSafe for WebSocket<S, H> where
H: RefUnwindSafe,
S: UnwindSafe,
[src]
H: RefUnwindSafe,
S: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut Tⓘ
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Same<T> for T
type Output = T
Should always be Self
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,