From bea8e4825daa34e88da27d491e377a9e8ff795e5 Mon Sep 17 00:00:00 2001 From: Nikolay Kim Date: Mon, 23 Oct 2017 18:42:15 -0700 Subject: [PATCH] update websocket example --- examples/websocket.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/examples/websocket.rs b/examples/websocket.rs index 7baffaa53..8d41de4da 100644 --- a/examples/websocket.rs +++ b/examples/websocket.rs @@ -1,3 +1,8 @@ +//! Simple echo websocket server. +//! Open `http://localhost:8080/ws/index.html` in browser +//! or [python console client](https://github.com/actix/actix-web/blob/master/examples/websocket-client.py) +//! could be used for testing. + #![allow(unused_variables)] extern crate actix; extern crate actix_web; @@ -13,19 +18,24 @@ impl Actor for MyWebSocket { type Context = HttpContext; } +/// Http route handler impl Route for MyWebSocket { type State = (); fn request(req: &mut HttpRequest, payload: Payload, ctx: &mut HttpContext) -> RouteResult { + // websocket handshake let resp = ws::handshake(req)?; + // send HttpResponse back to peer ctx.start(resp); + // convert bytes stream to a stream of `ws::Message` and register it ctx.add_stream(ws::WsStream::new(payload)); Reply::async(MyWebSocket) } } +/// Standard actix's stream handler for a stream of `ws::Message` impl StreamHandler for MyWebSocket { fn started(&mut self, ctx: &mut Self::Context) { println!("WebSocket session openned"); @@ -40,6 +50,7 @@ impl Handler for MyWebSocket { fn handle(&mut self, msg: ws::Message, ctx: &mut HttpContext) -> Response { + // process websocket messages println!("WS: {:?}", msg); match msg { ws::Message::Ping(msg) => ws::WsWriter::pong(ctx, msg), @@ -66,6 +77,7 @@ fn main() { // websocket route .resource("/ws/", |r| r.get::()) .route_handler("/", StaticFiles::new("examples/static/", true))) + // start http server on 127.0.0.1:8080 .serve::<_, ()>("127.0.0.1:8080").unwrap(); println!("Started http server: 127.0.0.1:8080");