nginx的源码分析--间接回调机制的使用和类比

本文详细介绍了Nginx如何使用间接回调机制处理客户端和上游服务器的连接。通过ngx_http_connection_t和ngx_peer_connection_t结构体,Nginx能够高效地管理HTTP请求和upstream机制,实现灵活的读写事件回调。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nginx使用了间接回调机制,结合upstream机制的使用来说明一下,首先明确几个事实:

1)其实ngxin和下游客户端的连接使用的是ngx_http_connection_t,每个连接对应着一个读事件、一个写事件,epoll监听队列监听的是事件(ngx_event_t),但是事件的data字段对应于这个事件所属的连接(ngx-connection_t)。但是nginx和上游服务器之间的连接使用的ngx_peer_connection_t,其实ngx_peer_connection_t是ngx_connection_t结构体的封装,前者包括了后者,算是后者的高级应用

2)ngx_connection_t对应nginx和客户端的连接,每个这样的连接都有一个请求(ngx_http_request_t)与之相对应,同时请求中有连个字段,write_event_handler和read_event_handler,这连个字段属于请求的读写回调,但是他很显然不能被激活,能激活的就是读写事件(ngx_event_t)

3)在HTTP请求的后期阶段,nginx通过连接上的读写事件回调(这个已经被epoll监控)来间接调用请求上的读写回调,这么一来,如果想该变请求上的流程,只需要修改

ngx_http_request_t上的read_event_handler和write_event_handler即可,这样的实现可以在ngx_http_handler函数中体现

4)nginx在处理upstream和上游的连接时,每一个upstream连接(ngx_peer_connection_t)对应一个upstream机制(ngx_http_upstream_t),因为upstream的连接也可以看成ngx-connection_t,所以和ngx_connection_t类似,ngx_http_upstream_t中也有两个字段read_event_handler和write_event-handler,这样在处理和上游的连接上的读写回调时也是间接调用了ngx_http_upstream_t的读写回调函数 这个在ngx_http_upstream_connection中可以看到 c=u->peer.connection,这里的c(ngx-connection_t)是和上游服务器之间的连接

c->write->hanlder = ngx_http_upstream_handler,在这一行和接下来的几行,认真阅读,会发现ngx_http_upstream_handler和ngx_http_handler有相似之处

5)这么一来,在接下来的处理中只需关注ngx_http_upstream_t上的读写(write_event_handler & read_event_handler)即可完成nginx和上游服务器之间的交互,只需关系ngx_http_request_t中的读写(write_event_handler & read_event_handler)即可完成nginx和客户端之间的监护

(总结:在连诶http请求和经过upstream机制的请求时,一定要明白当前的ngx_connection_t是指nginx和谁之间的连接)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值