如何在 actix-web 服务器启动时运行回调函数?

hig*_*nce 9 rust rust-actix actix-web

目前我的主要功能,服务器启动的地方看起来像这样

#[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
}
Run Code Online (Sandbox Code Playgroud)

服务器启动后,我想运行一个(异步)函数,以向另一台服务器发出请求,并且该服务器应该向刚刚启动并运行的该服务器发出另一个请求。

不确定我在文档中是否看到任何提及仅在服务器启动时运行一次的回调函数的内容。

例如,也许让它run()发挥作用,像这样:

run(|| {
  // server started now perform some request or whatever
  Client::new().post(&url).json(json_stuff).send().await
})
Run Code Online (Sandbox Code Playgroud)

编辑 我想我已经解决了,当我可以回答我自己的问题时会发布答案

hig*_*nce 3

我通过加入 2 个异步函数解决了这个问题,创建了另一个异步函数

async fn another_func() -> Result<()> {
...
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用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(()
Run Code Online (Sandbox Code Playgroud)

当然如果有人有更好的答案请留言