乐趣区

关于后端:Zino开发框架的应用接口抽象

Zino 致力于打造 Rust 语言中最好用的企业级利用开发框架。咱们借鉴 Node 的 Egg.js、Go 的 GoFrame、Java 的 Spring Boot 等框架,奉行『约定优于配置』的准则,提供开箱即用的功能模块,极大进步开发效率;并通过利用接口形象与 Rust 的 axum、actix-web 等框架集成,买通社区生态资源。

以上摘自:Zino 开发框架中文教程

从这个定位上来讲,Zino 并不是传统意义上的 Web 框架,某种程度上能够看成是『框架的框架』(这个词是我从 Egg.js 那里看到的)。所以,Zino 并不与 axum、actix-web、warp、rocket(Rust 语言中排名前四的 Web 框架)等 Web 框架间接竞争,也无心取代它们;相同,Zino 通过利用接口形象来提供与它们的集成。在 zino-core 的 application 模块中,咱们定义了以下 Trait:

这就是 Zino 框架的终点!咱们只有给其它 Web 框架实现 Application 这个 Trait,就能把这个框架的性能集成到 Zino 中,并使利用的启动形式保持一致:

其中第 7 行代码引入了 Application 这个 Trait,第 10 行代码中的 AxumCluster 类型通过实现 Application 提供了与 axum 框架的集成,boot 函数创立了一个 AxumCluster 实例。须要留神的是,在一个利用中,boot 函数仅且只能调用一次。(最开始 boot 这个函数先后被命名成 new 和 start,起初我感觉改成 boot 如同更能传播一些奥妙的意思😀)那么,boot 函数到底实现了哪些性能呢?咱们来看看它的代码:

能够看到,boot 函数实际上就是利用所依赖的零碎组件的初始化,包含密钥生成、tracing 订阅、metrics 采集、HTTP 客户端以及可选的 HTML 模板渲染。顺便提一下,Zino 框架的 metrics 采集内置了 prometheus 拉取接口:

Application 只有两个必须要实现的办法:register 和 run,其中 register 用来注册路由,run 用来加载异步 cron 工作并运行利用。因为异步 cron 工作的执行波及到异步运行时的抉择,而 zino-core 自身并没有限定只能应用特定的运行时(尽管大部分状况下还是会优先选择 tokio),所以须要实现者自行在 run 办法的实现中指定。对于同步 cron 工作,不波及到异步运行时的抉择,咱们就在 Application 的 spawn 办法中提供了默认实现:

Application 提供的其它办法都比较简单,有趣味的 Rustacean 能够间接浏览源代码。更多内容能够关注咱们的微信公众号:

退出移动版