rust网络框架Pingora源码阅读3
这应该是Pingora
源码阅读的最后一篇文章,之前介绍了Pingora
中两个比较重要的概念, Server
和Service
, 本篇文章着重于监听服务的钩子函数, 这也是我们主要写业务代码的地方。
这应该是Pingora
源码阅读的最后一篇文章,之前介绍了Pingora
中两个比较重要的概念, Server
和Service
, 本篇文章着重于监听服务的钩子函数, 这也是我们主要写业务代码的地方。
上次主要阅读了Pingora
的Server
部分的代码, 本文阅读Pingora
另一个比较重要的部分Service
, Pingora
内置两种服务background(后台)和Listening(监听), 本文着重后者。
要想深入Pingora
应该是需要阅读源代码的,所以分析一下源代码,虽然Pingora
没有提供丰富的示例,但是提供了一些不错的文档,比如它的internals.md
文档,提供了很多细节和示意图,本系列文章会引用很多其中的示意图,Pingora
的源码分析应该会分为2篇文章或更多。
Pingora
一直是我比较期待的项目,所以写个入门系列教程吧。之前研究过一些其他产品,比如nginx
, nginx-ingress
, apisix
, bfe
等, 前三者植入业务基本靠lua
或者说openresty
而bfe
的社区实在是一言难尽, 所以我认为Pingora
会成为Rust的明星项目,虽然没达到预期,但至少提供了一个框架,一个社区。
上一篇文章讨论了axum如何获取参数,这一节看看axum是怎么构造响应内容的,如果你还不知道如何处理axum的请求参数,可以阅读我之前的文章: https://youerning.top/post/axum/quickstart-1。
rust的tokio是一个很棒的异步运行时,所以tokio出品的axum大概率也是个很棒的框架,处于对异步编程和tokio的喜欢,所以我打算以后都使用axum作为web开发的首选框架。
想尝试写一个web框架,不是因为Django, Flask, Sanic, tornado等web框架不香, 而是尝试造一个轮子会对框架的认识更深,为了认识更深自然不应该依赖第三方库(仅使用内置库)。