Rocket 在 0.5 之后进入稳定 async 时代,这一点非常关键。
因为现代 Web 发射任务大量都在等待:
- 数据库
- Redis
- 外部 API
- 文件系统
- 消息系统
如果控制员在等结果时傻站着不动,塔台吞吐就会很差。
Rocket 的 async 处理意味着:
控制塔在等待外部系统回信时,可以把这次任务挂起,让出资源给别的发射流程。
例如:
#[get("/external-status")]
async fn external_status() -> String {
let result = reqwest::get("https://example.com/status")
.await
.map(|resp| resp.status().as_u16())
.unwrap_or(500);
format!("remote status: {result}")
}#Rocket 为什么让人觉得“稳”
不只是因为 async。
更因为它叠加了 Rust 的强类型:
- 路径参数类型不对,过不了
- guard 失败,进不了
- state 没配好,最好尽早发现
- 很多错误在编译期就暴露
这很像:
不是到点火前才发现燃料型号不对
而是在发射系统录入时就被拦下这就是 Rocket 最吸引人的地方之一:
它让很多发射事故变成“无法提交的错误表单”,而不是运行时爆炸。