Asynchronous web framework for Actix.
Actix web is licensed under the Apache-2.0 license.
To use actix-web
, add this to your Cargo.toml
:
toml
[dependencies]
actix-web = "0.2"
```rust extern crate actix; extern crate actixweb; extern crate envlogger;
use actix::; use actix_web::;
struct MyWebSocket;
/// Actor with http context
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<Self>) -> RouteResult<Self>
{
// 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 handle stream
ctx.add_stream(ws::WsStream::new(payload));
Reply::async(MyWebSocket)
}
}
/// Standard actix's stream handler for a stream of ws::Message
impl StreamHandler
fn finished(&mut self, ctx: &mut Self::Context) {
println!("WebSocket session closed");
}
}
impl Handler
fn main() { ::std::env::setvar("RUSTLOG", "actixweb=info"); let _ = envlogger::init(); let sys = actix::System::new("ws-example");
HttpServer::new(
Application::default("/")
// enable logger
.middleware(Logger::new(None))
// websocket route
.resource("/ws/", |r| r.get::<MyWebSocket>())
.route_handler("/", StaticFiles::new("examples/static/", true)))
.serve::<_, ()>("127.0.0.1:8080").unwrap();
Arbiter::system().send(msgs::SystemExit(0));
let _ = sys.run();
} ```