异步库调研
异步库调研
需求: 调研rust的异步编程库,并对比,主要用于web服务器
调研表
搜索对象: deepseek/copilot、github、google
(注意:首筛表中,除link和star外,部分数据由gpt给出,不一定正确。后面的次筛表中,才会实际调研。另外,数据以此文件书写时间为准)
粗略调研
-[card|addClass(ab-col4)|addClass(ab-super-width)]
_  | link  | 简介  | 特性  | 
|---|---|---|---|
Tokio  | tokio-rs/tokio ⭐28.7k, 3hours ago  | Rust编程语言的异步运行时,提供异步事件驱动平台,构建快速,可靠和轻量级网络应用。利用Rust的所有权和并发模型确保线程安全。  | 特性: 
 代表性 Web 框架:hyper、axum、warp、tide(可选 tokio)、salvo  | 
actix-web  | actix/actix-web ⭐23k, 2days ago  | actix-web 是 Rust 生态中性能极高的 Web 框架,底层异步运行时为 actix-rt(基于 tokio)。  | 特性: 
 注意:actix-rt 现已趋向与 tokio 兼容。  | 
axum  | tokio-rs/axum ⭐21.8k, 14 hours ago  | 基于 Tokio、Tower 和 Hyper 构建的符合人体工程学且模块化的网络框架  | 特性: 
 QPS: 340k (wrk) / 308k (ab)  | 
Rocket  | rwf2/Rocket ⭐25.2k, last month  | 一个用于 Rust 语言的网络框架  | 特性:  | 
hyperlane  | 非开源? 和hyper什么关系? docs  | ||
hyper  | hyperium/hyper ⭐15.3k, last week  | An HTTP library for Rust  | 略  | 
warp  | seanmonstar/warp ⭐9.9k, 11 months ago  | 一个超级简单、可组合、适用于高速运行的网络服务器框架  | 特性:  | 
smol  | smol-rs/smol ⭐4.2k, last week  | smol 是一个极简且高性能的异步运行时,目标是轻量、易嵌入。  | 特性: 
 代表性 Web 框架:async-h1(Web 服务器实现)、 tide(可选 smol)  | 
async-std  | async-rs/async-std ⭐4k, 3 months ago  | async-std 是受 Node.js/Go 启发的异步运行时,API 风格类似 std::,上手简单。  | 特性: 
 代表性 Web 框架: tide、poem(支持 tokio 与 async-std)、actix-web(实验性支持)  | 
glommio  | DataDog/glommio ⭐3.3k, 2 months ago  | 针对高性能 IO 密集型场景的异步库,面向 Linux io_uring。  | 特性: 
 代表性项目:少数高端定制场景,主流不多  | 
性能测试
参考:
wrk 压测
压测命令:
wrk -c360 -d60s http://127.0.0.1:60000/压测结果:
| 排名 | 框架 | QPS (每秒查询数) | 
|---|---|---|
| 1 | Tokio | 340130.92 | 
| 2 | Hyperlane框架 | 324323.71 | 
| 3 | Rocket框架 | 298945.31 | 
| 4 | Rust标准库 | 291218.96 | 
| 5 | Gin框架 | 242570.16 | 
| 6 | Go标准库 | 234178.93 | 
| 7 | Node标准库 | 139412.13 | 
ab 压测
压测命令:
ab -n 1000000 -c 1000 -r -k http://127.0.0.1:60000/压测结果:
| 排名 | 框架 | QPS (每秒查询数) | 
|---|---|---|
| 1 | Tokio | 308596.26 | 
| 2 | Hyperlane框架 | 307568.90 | 
| 3 | Rocket框架 | 267931.52 | 
| 4 | Rust标准库 | 260514.56 | 
| 5 | Go标准库 | 226550.34 | 
| 6 | Gin框架 | 224296.16 | 
| 7 | Node标准库 | 85357.18 | 
二次筛选
分类
其中有很多都是基于 tokio: hyper、axum、warp、tide(可选 tokio)、salvo、actix-web 等
先排除2个月没更新和低star的,筛选几个:
- tokio-rs/tokio ⭐28.7k, 3hours ago 
- actix/actix-web ⭐23k, 2days ago
 - tokio-rs/axum ⭐21.8k, 14 hours ago
 
 - rwf2/Rocket ⭐25.2k, last month
 
框架定位与架构
| 框架 | 定位 | 架构 | 
|---|---|---|
| Tokio | 异步运行时/基础库 | 事件驱动、底层库 | 
| Axum | 现代Web框架,强调类型安全 | Tower生态,Tokio底层 | 
| Actix-web | 高性能 Web 框架 | Actor模型,Tokio底层 | 
| Rocket | 易用、特性丰富的Web框架 | 自研异步/同步支持,非Tokio依赖但支持 | 
异步机制与生态整合
| 框架 | 异步支持 | 生态集成 | 特点 | 
|---|---|---|---|
| Tokio | 强,基础库 | 全面 | 生态基石(hyper、axum等依赖) | 
| Axum | 强,基于Tokio | tower, hyper, serde, tokio | 极致类型安全,组合式中间件 | 
| Actix-web | 强,基于Tokio | actix actor, serde, tokio, futures | 超高性能,actor模型适用于复杂业务 | 
| Rocket | 从0.5起异步支持 | diesel, serde, 自有集成 | 语法友好,易上手,编译期验证 | 
性能对比
| 框架 | 典型基准测试 QPS | 延迟 | 备注 | 
|---|---|---|---|
| Tokio | N/A(基础库) | N/A | 需配合hyper等 | 
| Axum | 接近actix-web | 低 | 性能与actix-web相近,易扩展 | 
| Actix-web | 业界最高之一 | 低 | 单线程极致快,支持多线程 | 
| Rocket | 稍逊于actix/axum | 略高 | 以易用性为主,性能仍优秀 | 
注:具体性能取决于业务和使用方式,见 techempower benchmarks。
API 设计与易用性
| 框架 | API风格 | 类型安全 | 学习曲线 | 文档生态 | 
|---|---|---|---|---|
| Tokio | 底层异步原语 | 高 | 中高 | 优秀 | 
| Axum | 路由器组合,类型驱动 | 极高 | 中高 | 详细 | 
| Actix-web | 类Express,宏丰富 | 中等 | 中等 | 完整 | 
| Rocket | 声明式/宏丰富 | 高(编译期校验) | 最低 | 非常友好 | 
生态与社区活跃度
- Tokio:异步Rust生态核心,众多库依赖,社区活跃。
 - Actix-web:高性能Web API首选,社区大、文档完善。
 - Axum:新秀,发展极快,社区活跃,文档详细。
 - Rocket:老牌Web框架,语法优雅,社区稳定,文档友好。
 
典型应用场景
| 框架 | 适用场景 | 
|---|---|
| Tokio | 需自定义异步I/O、底层网络编程 | 
| Axum | 追求类型安全、组合中间件、现代微服务 | 
| Actix-web | 高性能API服务、复杂业务逻辑 | 
| Rocket | 快速开发、易学、原型设计、教学 | 
文档比较
| 框架 | 文档 | 
|---|---|
| Tokio | 官网文档 丑 API 非官方中文 | 
| Axum | 官方文档 丑 example | 
| Actix-web | 官方文档 | 
| Rocket | 官方文档 | 
功能,关键能力支持
| 功能 | Actix-web | Axum | Rocket | Tokio(直接使用) | 
|---|---|---|---|---|
| HTTP/1.1 | ✅ | ✅ | ✅ | ✅ | 
| HTTP/2 | ✅ | ✅ | ✅ | ✅ | 
| WebSocket | ✅ | ✅ | 🔶 需插件 | ❌ | 
| 中间件生态 | ✅⭐ | ✅🚀 | ✅ | ❌ | 
| 测试工具链 | ✅ | ✅ | ✅⭐ | ❌ | 
| 热重载 | ❌ | ❌ | ✅ | ❌ | 
维护者
注意:Axum 是 Tokio 团队官方维护的。
tokio-rs/tokio 和 tokio-rs/axum 都是 tokio-rs 组织的仓库
总结与建议
后面又参考了下Rust群群友的建议:
io_uring 好,能支持 io_uring 的 monoio/tokio 好,不过不急,可以等 tokio
然后 axum, actix-web, rocket 毕竟也是基于 tokio,主要是看裸用 tokio,还是用他的封装而已。
 看是只用web的异步,还是文件内存等IO也需要异步。功能上是否需要websocket、热重载等功能 (tokio不提供)
另外,axum和tokio都是tokio-rs组织下的仓库,前者也算是tokio官方的。
最后结合群友们的建议,决定选用axum。谢谢大家