Использование Actix из приложения Tokio: смешивание actix_web :: main и tokio :: main?

В настоящее время у меня есть основной, написанный как пример async для библиотеки Reqwest.

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

Мы можем использовать для этого точный пример. Теперь я хочу в основном добавить флаг -l <port>, чтобы изменить поведение моего приложения, и при таком запуске я хочу, чтобы оно прослушивало порт и запускало веб-сервер. Я хочу использовать Actix Web, который задокументирован следующим образом:

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

Как я могу синтезировать два fn main: один, украшенный #[actix_web::main], и один, украшенный #[tokio::main], чтобы использовать Actix Web из приложения, которое уже использует Tokio? Я не могу найти по этому поводу никакой документации? Как нам использовать материалы Tokio с веб-сервера Actix и как перенести приложение Tokio в веб-приложение Actix?


person Evan Carroll    schedule 01.03.2021    source источник
comment
Взгляните на github.com/ actix / examples / blob / master / basics / run-in-thread / src /   -  person Njuguna Mureithi    schedule 01.03.2021
comment
Я сомневаюсь, что у вас может быть несколько основных, поскольку у вас может быть только одна основная запись   -  person Njuguna Mureithi    schedule 01.03.2021
comment
У вас не может быть нескольких main функций, но, поскольку Actix в любом случае работает на Tokio, может быть способ указать Actix использовать существующую среду выполнения Tokio вместо запуска собственной.   -  person Jmb    schedule 01.03.2021


Ответы (1)


Поскольку 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.x версии Actix-web.

Не стесняйтесь редактировать этот ответ, когда Actix-web 4 выйдет из бета-версии.

person Alice Ryhl    schedule 01.03.2021