【问题标题】:Using Actix from a Tokio App: mixing actix_web::main and tokio::main?在 Tokio 应用程序中使用 Actix:混合 actix_web::main 和 tokio::main?
【发布时间】:2021-03-01 17:08:20
【问题描述】:

目前我有一个主要写的像async example for the Reqwest library

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

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

#[actix_web::main]
async fn main() -> std::io::Result<()> {

如何合成两个fn main:一个用#[actix_web::main] 装饰,一个用#[tokio::main] 装饰,以便在已经使用Tokio 的应用程序中使用Actix Web?我找不到任何关于 这个?我们如何从 Actix Web 服务器使用 Tokio 的东西,以及我们如何将 Tokio 应用程序移植到 Actix Web 应用程序?

【问题讨论】:

  • 我怀疑你可以有多个主条目,因为你只能有一个主条目
  • 您不能拥有多个 main 函数,但由于 Actix 无论如何都在 Tokio 上运行,因此可能有一种方法可以告诉 Actix 使用现有的 Tokio 运行时而不是启动自己的运行时。

标签: asynchronous rust rust-tokio actix-web


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢!只是在这里留下一些面包屑......我正在使用 Actix-Web 3 和 reqwest 0.11 并收到错误 thread 'actix-rt:worker:2' panicked at 'there is no reactor running, must be called from the context of a Tokio 1.x runtime'
  • Actix-web 现已退出测试版。以下是一些有用的链接:issue tracking this on Githubmigration guide
猜你喜欢
  • 2020-12-31
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多