从 Tokio 应用程序使用 Actix:混合 actix_web::main 和 tokio::main?

Eva*_*oll 6 asynchronous rust rust-tokio actix-web

目前我有一个像异步示例Reqwest一样编写的主要内容。

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
Run Code Online (Sandbox Code Playgroud)

我们可以使用那里的确切示例。现在我想基本上添加一个-l <port>标志来改变我的应用程序的行为,当以这种方式触发时,我希望它侦听端口并运行 Web 服务器。我想使用这样记录的Actix Web

#[actix_web::main]
async fn main() -> std::io::Result<()> {
Run Code Online (Sandbox Code Playgroud)

我如何综合两个fn main:一个装饰#[actix_web::main]和一个装饰以#[tokio::main]从已经使用 Tokio 的应用程序中使用 Actix Web?我找不到有关此的任何文档?我们如何从 Actix Web 服务器使用 Tokio 的东西,我们如何将 Tokio 应用程序移植到 Actix Web 应用程序?

Ali*_*yhl 7

由于 Actix-web 内部使用 Tokio,当您使用 时#[actix_web::main],您将能够使用所有常用的 Tokio 实用程序,就像使用#[tokio::main].

但是请注意,您需要正确匹配 Tokio 的版本。Actix-web 版本3.x.y使用 Tokio 0.2.x,因此在使用该版本的 Actix 时,您需要使用与该版本的 Tokio 配合使用的实用程序。要使用最新版本的 Tokio,您需要改用4.0.0-beta.xActix-web的版本。

一旦 Actix-web 4 结束测试,请随时编辑此答案。