1
0
mirror of https://github.com/actix/examples synced 2025-06-27 09:29:02 +02:00

refactor: use ractor

This commit is contained in:
Rob Ede
2024-09-12 14:24:41 -04:00
parent f2d1206baa
commit 7259f9417a
6 changed files with 192 additions and 66 deletions

View File

@ -4,10 +4,10 @@
use actix_files::NamedFile;
use actix_web::{middleware, web, App, Error, HttpRequest, HttpResponse, HttpServer, Responder};
use actix_web_actors::ws;
use ractor::Actor;
mod server;
use self::server::MyWebSocket;
use self::server::{MyWebSocket, WsMessage};
async fn index() -> impl Responder {
NamedFile::open_async("./static/index.html").await.unwrap()
@ -15,7 +15,19 @@ async fn index() -> impl Responder {
/// WebSocket handshake and start `MyWebSocket` actor.
async fn echo_ws(req: HttpRequest, stream: web::Payload) -> Result<HttpResponse, Error> {
ws::start(MyWebSocket::new(), &req, stream)
let (res, session, stream) = actix_ws::handle(&req, stream)?;
let (actor, _handle) = Actor::spawn(None, MyWebSocket, session).await.unwrap();
actix_web::rt::spawn(async move {
let mut stream = stream.aggregate_continuations();
while let Some(Ok(msg)) = stream.recv().await {
actor.send_message(WsMessage::Ws(msg)).unwrap();
}
});
Ok(res)
}
// the actor-based WebSocket examples REQUIRE `actix_web::main` for actor support