【发布时间】:2020-05-22 12:14:02
【问题描述】:
我正在尝试编写一个库来连接到远程服务器并交换数据。我在 C++ 中使用 Boost::Asio 做到了这一点,并试图用 Rust 做同样的事情。
我遇到的一个问题是从 Asio 映射概念,例如 async_write/read 到 Tokio,首先是看似所有 Tokio 示例都要求我将 main() 替换为 async main(),而我想将我所有的异步代码封装在结构和相关的实现中。
是否可以在不替换main() 的情况下使用Tokio? mio 可能是唯一的方法吗?
【问题讨论】:
-
你可以创建一个 Tokio reactor 并提交一个 future 来处理,但有什么意义呢?您只是手动编写 proc 宏为您编写的代码。这里似乎有更深的误解。
-
也许吧。使用 Asio,我有一个线程池并让我的事件循环在其上运行,我不需要替换 main。使用 Rust 我会这样做,这让我感到困惑。
-
您可以手动创建运行时:docs.rs/tokio/0.2.21/tokio/runtime/index.html,这就是 tokio 主宏在后台执行的操作。它仅适用于大量应用程序,尤其是样板示例。
-
reactor 只是管理 io 调用进入操作系统。运行时是完整的线程池包,用于在其上运行任务、反应器和计时器管理。
标签: rust rust-tokio mio