不在 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()
.
我读 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()
.