如何运行 actix-web 服务器启动时的回调函数?
How to run a callback function on actix-web server start?
目前我的主要功能,服务器启动的地方是这样的
#[actix_rt::main]
async fn main() -> std::io::Result<()> {
let address = "0.0.0.0:3000";
HttpServer::new(move || {
let app_state = {...some state};
App::new()
.data(app_state)
.wrap(middleware::Logger::default())
.service(network_api::init_service())
})
.bind(address)?
.run()
.await
}
服务器启动后,我想运行一个(异步)函数,
向另一台服务器发出请求,该服务器应响应对此服务器的另一个请求
刚起床 运行ning.
不确定我在文档中看到任何提到回调函数的内容 运行 仅在服务器启动时出现一次。
例如,可以将它放在 run()
函数中,如下所示:
run(|| {
// server started now perform some request or whatever
Client::new().post(&url).json(json_stuff).send().await
})
编辑
我想我解决了,当我可以回答我自己的问题时 post 会回答吗
我通过加入 2 个异步函数解决了这个问题,
创建了另一个异步函数
async fn another_func() -> Result<()> {
...
}
并像这样使用 future::join()
let server = HttpServer::new(move || {
let app_state = {...some state};
App::new()
.data(app_state)
.wrap(middleware::Logger::default())
.service(network_api::init_service())
})
.bind(address)?
.run();
future::join(server, another_func()).await;
Ok(()
当然如果有人有更好的答案请post吧
我实际上有点挣扎,最终用 tokio join 替换了 future::join!宏如下:
tokio::join!(server, utils::open_web_app(server_address));
Ok(())
目前我的主要功能,服务器启动的地方是这样的
#[actix_rt::main]
async fn main() -> std::io::Result<()> {
let address = "0.0.0.0:3000";
HttpServer::new(move || {
let app_state = {...some state};
App::new()
.data(app_state)
.wrap(middleware::Logger::default())
.service(network_api::init_service())
})
.bind(address)?
.run()
.await
}
服务器启动后,我想运行一个(异步)函数, 向另一台服务器发出请求,该服务器应响应对此服务器的另一个请求 刚起床 运行ning.
不确定我在文档中看到任何提到回调函数的内容 运行 仅在服务器启动时出现一次。
例如,可以将它放在 run()
函数中,如下所示:
run(|| {
// server started now perform some request or whatever
Client::new().post(&url).json(json_stuff).send().await
})
编辑 我想我解决了,当我可以回答我自己的问题时 post 会回答吗
我通过加入 2 个异步函数解决了这个问题, 创建了另一个异步函数
async fn another_func() -> Result<()> {
...
}
并像这样使用 future::join()
let server = HttpServer::new(move || {
let app_state = {...some state};
App::new()
.data(app_state)
.wrap(middleware::Logger::default())
.service(network_api::init_service())
})
.bind(address)?
.run();
future::join(server, another_func()).await;
Ok(()
当然如果有人有更好的答案请post吧
我实际上有点挣扎,最终用 tokio join 替换了 future::join!宏如下:
tokio::join!(server, utils::open_web_app(server_address));
Ok(())