尝试 运行 来自 actix-web 的演员时 spawn_local 出现恐慌
Panic at spawn_local when trying to run an actor from actix-web
rust-actix
尝试 运行 来自 actix-web 的演员时 spawn_local 出现恐慌
我正在尝试在 actix-web 服务器中启动一个 actor 并使用数据传递其地址。
use actix::prelude::*;
use actix_web::{web, App, HttpRequest, HttpServer, Responder};
struct MyActor;
impl Actor for MyActor {
type Context = Context<Self>;
}
struct AppState {
actor_addr: Addr<MyActor>,
}
async fn greet(req: HttpRequest, data: web::Data<AppState>) -> impl Responder {
format!("Hello!")
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
let addr = MyActor.start();
HttpServer::new(move || {
App::new()
.data(AppState {
actor_addr: addr.clone(),
})
.route("/", web::get().to(greet))
})
.bind(("127.0.0.1", 8080))?
.run()
.await
}
想法是从 greet 函数向 actor 发送消息。尝试 运行 时,出现以下恐慌:
thread 'main' panicked at '`spawn_local` called from outside of a `task::LocalSet`', /Users/myuser/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.12.0/src/task/local.rs:305:18
我尝试用 #[actix_web::main]
替换 #[actix_rt::main]
并启动了 actor。
潜伏代码,我意识到 #[actix_web::main]
是 #[actix_rt::main]
的重新导出,所以它应该可以工作。
依赖版本是:
actix-web = "3.3.2"
actix = "0.12.0"
可能依赖关系不匹配。
这种方式能达到我的目的吗?
提前致谢。
更改为actix = "0.10",actix 0.12似乎有很多更新的依赖项与actix-web 3.3冲突。
rust-actix
尝试 运行 来自 actix-web 的演员时 spawn_local 出现恐慌
我正在尝试在 actix-web 服务器中启动一个 actor 并使用数据传递其地址。
use actix::prelude::*;
use actix_web::{web, App, HttpRequest, HttpServer, Responder};
struct MyActor;
impl Actor for MyActor {
type Context = Context<Self>;
}
struct AppState {
actor_addr: Addr<MyActor>,
}
async fn greet(req: HttpRequest, data: web::Data<AppState>) -> impl Responder {
format!("Hello!")
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
let addr = MyActor.start();
HttpServer::new(move || {
App::new()
.data(AppState {
actor_addr: addr.clone(),
})
.route("/", web::get().to(greet))
})
.bind(("127.0.0.1", 8080))?
.run()
.await
}
想法是从 greet 函数向 actor 发送消息。尝试 运行 时,出现以下恐慌:
thread 'main' panicked at '`spawn_local` called from outside of a `task::LocalSet`', /Users/myuser/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.12.0/src/task/local.rs:305:18
我尝试用 #[actix_web::main]
替换 #[actix_rt::main]
并启动了 actor。
潜伏代码,我意识到 #[actix_web::main]
是 #[actix_rt::main]
的重新导出,所以它应该可以工作。
依赖版本是:
actix-web = "3.3.2"
actix = "0.12.0"
可能依赖关系不匹配。
这种方式能达到我的目的吗?
提前致谢。
更改为actix = "0.10",actix 0.12似乎有很多更新的依赖项与actix-web 3.3冲突。