如何运行 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(())