码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-06-22 06:25:18      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:nginx

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和谁之间的连接)

nginx的源码分析--间接回调机制的使用和类比,布布扣,bubuko.com

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

标签:nginx

原文地址:http://blog.csdn.net/yusiguyuan/article/details/32973649

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!