两张图展示当前 Rust Web 生态

两张图展示当前 Rust Web 生态

今天画了两张图,来展示一下当前 Rust Web 生态。

tokio 生态

由图可见,tokio 生态目前在网络服务和Web 开发方面基本的核心组件都已齐全。尤其是随着 Axum 框架的推出,tokio 在 Web 生态已接近完备。

关于 Axum 框架正好我这里有一次视频分享(点击观看):

RustFriday 飞书群线上沙龙 第十七期 | Axum异步Web框架

  1. Axum 的中间件是直接使用 tower 的抽象,这样的好处就是:
  • 使用了统一 的 Service 和 Layer 抽象标准,方便大家来繁荣生态
  • 复用 tokio / hyper/ tonic 生态
  • axum 的路由机制并没有使用像 rocket那样的属性宏,而是提供了简单的 DSL (链式调用)。路由是基于迭代和正则表达式来匹配的,路由性能目测应该和 actix-web 差不多。
  • 也提供了方便的 提取器 ,只要实现 FromRequest 就是一个提取器,实现起来也非常方便。
  • 其他琐碎,见视频。
  • 总之,一句话,Axum 在我看来,是 Rust 在 Web 开发领域的一个里程碑,它强势带动了 tokio/tower 生态。虽然现在还不太成熟,但潜力很大。

    其他 Web 框架

    actix-web 自己加了一层runtime将线程作为Actor来管理多个线程,每个线程实际跑的都是tokio的单线程block_on,这样线程之间就没法任务窃取了,失去了tokio任务调度的优势,换取了无线程上下文切换的性能。这是actix-web和其他框架的主要区别。Axum则是完全利用tokio。 actix-web 的中间件也借鉴了 Tower Service,但它并不像 tower 那么通用。

    rocket 的优势在于完善的 API,尤其是处理表单非常完善。中间件不同于其他框架,为了达到安全和正确的目标,rocket对中间件有了较强的约束,并不能像 Axum 那样自由地实现中间件。这也注定它形成生态比较难。rocket目前并不看重性能,也许在未来1.0之后会进行性能优化。

    如何选择你自己的web框架,结合你的场景和喜好来选择吧。

    发布于 2021-08-10 12:23