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能够间接浏览源代码。更多内容能够关注咱们的微信公众号: