mirror of
https://github.com/actix/examples
synced 2025-06-27 09:29:02 +02:00
refactor: use ractor
This commit is contained in:
@ -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
|
||||
|
Reference in New Issue
Block a user