不在 Rocket 0.5+ 中使用 Async?

Not using Async in Rocket 0.5+?

我读 Rocket v0.5 现在使用 Tokio 运行时来支持异步。我知道当我们有很多(比如成百上千个)并发 IO 绑定请求时,异步可以提供很好的可扩展性。但是许多 web/REST 服务器应用程序根本不属于该类别,在这种情况下,我觉得 Async 只会使事情复杂化。抱歉,如果这听起来像是一个愚蠢的问题,但是使用 Rocket 0.5+ 我仍然能够像以前一样编写传统的非异步代码吗? Rocket 0.5+ 中的异步支持是否意味着我们将 获得 async fn 处理程序的异步行为?如果是这样,Tokio 运行时还会在非异步代码中发挥作用吗?

当然可以。

看网页第一个examples

#[get("/")]
fn index() -> &'static str {
   "Hello, world!"
}

任何地方都没有async/await。 Rocket5 最好的事情是你可以选择哪些 views 是同步的,哪些是异步的,只需将它们设置为同步,你就可以根据需要将它们混合在一起。

例如,这将有效:

#[get("/sync")]
fn index1() -> &'static str {
   "Hello, sync!"
}
#[get("/async")]
async fn index2() -> &'static str {
   "Hello, async!"
}

Rocket 运行time 在幕后都是异步的,但根本不需要向您的视图处理程序公开。当非异步处理程序是 运行 时,就好像 Rocket 使用了 spawn_blocking().