# Actix WS (Next Gen) > WebSockets for Actix Web, without actors. ## Usage ```toml # Cargo.toml anyhow = "1" actix-web = "4" actix-ws-ng = "0.3" ``` ```rust // main.rs use actix_web::{middleware::Logger, web, App, Error, HttpRequest, HttpResponse, HttpServer}; use actix_ws::Message; async fn ws(req: HttpRequest, body: web::Payload) -> Result { let (response, mut session, mut msg_stream) = actix_ws::handle(&req, body)?; actix_rt::spawn(async move { while let Some(Ok(msg)) = msg_stream.next().await { match msg { Message::Ping(bytes) => { if session.pong(&bytes).await.is_err() { return; } } Message::Text(s) => println!("Got text, {}", s), _ => break, } } let _ = session.close(None).await; }); Ok(response) } #[actix_web::main] async fn main() -> Result<(), anyhow::Error> { HttpServer::new(move || { App::new() .wrap(Logger::default()) .route("/ws", web::get().to(ws)) }) .bind("127.0.0.1:8080")? .run() .await?; Ok(()) } ``` ## License This project is licensed under either of - Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0) - MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT) at your option.