// use actix::{Actor, StreamHandler}; use actix_web::{web, App, Error, HttpRequest, HttpResponse, HttpServer}; use actix_web_actors::ws; /// Define http actor struct MyWs; impl Actor for MyWs { type Context = ws::WebsocketContext; } /// Handler for ws::Message message impl StreamHandler for MyWs { fn handle(&mut self, msg: ws::Message, ctx: &mut Self::Context) { match msg { ws::Message::Ping(msg) => ctx.pong(&msg), ws::Message::Text(text) => ctx.text(text), ws::Message::Binary(bin) => ctx.binary(bin), _ => (), } } } fn index(req: HttpRequest, stream: web::Payload) -> Result { let resp = ws::start(MyWs {}, &req, stream); println!("{:?}", resp); resp } fn main() { HttpServer::new(|| App::new().route("/ws/", web::get().to(index))) .bind("127.0.0.1:8088") .unwrap() .run() .unwrap(); } // // testing requires specific headers: // Upgrade: websocket // Connection: Upgrade // Sec-WebSocket-Key: SOME_KEY // Sec-WebSocket-Version: 13