rust网络框架Pingora源码阅读2
内容提要
本文介绍了Pingora服务中的监听部分代码。Pingora内置两种服务:后台服务和监听服务。代码分为两部分:服务的创建和初始化,以及将服务添加到服务器对象并启动服务器对象。监听服务支持HTTP、HTTPS和Unix Socket三种监听类型。监听服务根据添加的端点创建对应数量的协议栈对象,然后将连接传递给应用逻辑处理。处理过程中,根据协议类型调用不同的处理函数。
关键要点
-
本文介绍了Pingora服务中的监听部分代码,重点在监听服务。
-
Pingora内置两种服务:后台服务和监听服务。
-
代码分为服务的创建和初始化,以及将服务添加到服务器对象并启动服务器对象。
-
监听服务支持HTTP、HTTPS和Unix Socket三种监听类型。
-
监听服务根据添加的端点创建对应数量的协议栈对象,将连接传递给应用逻辑处理。
-
Service初始化是创建一个实现Service Trait的对象。
-
Service配置主要与服务类型有关,监听服务需要设置监听入口。
-
监听服务支持三种监听类型,HTTP、HTTPS和UDS。
-
Service的调用链从Server启动开始,最终创建异步任务运行Service的start_service方法。
-
start_service负责Service的整个生命周期,具体的转发逻辑交给协议栈处理。
-
run_endpoint开始监听请求,处理新获取的连接并进行握手。
-
stack的作用是获取连接,处理完后将连接交给app_logic处理。
-
HttpProxy的实现链涉及ServerApp和HttpServerApp两个trait。
-
process_new根据协议处理不同的连接,HTTP2需要再次握手。
-
process_new_http处理请求的各个阶段,主要通过session对象处理协议细节。
延伸问答
Pingora的监听服务支持哪些协议类型?
Pingora的监听服务支持HTTP、HTTPS和Unix Socket三种协议类型。
如何初始化Pingora的服务?
初始化Pingora的服务需要创建一个实现Service Trait的对象,并配置服务类型和监听入口。
Pingora的服务调用链是怎样的?
Pingora的服务调用链从Server启动开始,最终创建异步任务运行Service的start_service方法。
Pingora的run_endpoint函数有什么作用?
run_endpoint函数负责开始监听请求,处理新获取的连接并进行握手。
Pingora的HttpProxy是如何处理HTTP请求的?
HttpProxy通过session对象处理请求的各个阶段,主要在process_new_http函数中进行。
Pingora的监听服务如何添加监听端口?
可以通过调用add_tcp方法将监听端口添加到服务中,例如lb.add_tcp("0.0.0.0:10080");