nginx的源码分析--间接回调机制的使用和类比
来源:互联网 发布:小企业做账软件 编辑:程序博客网 时间:2024/06/06 17:41
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的源码分析--间接回调机制的使用和类比
- nginx的源码分析--间接回调机制的使用和类比
- nginx源码分析(1):hash的使用
- 使用文件名的间接
- docker的原理和类比
- java和.net的类比
- Linux里的几类比较主要和if使用
- shell 间接变量的使用
- nginx的定时器源码分析
- Nginx变量的源码分析
- Nginx源码分析—nginx的配置
- Nginx源码分析 - 初探Nginx的架构
- okhttp的间接 和 总结
- nginx队列模块的分析和使用
- Nginx源码分析-master和worker进程间的通信
- Nginx源码分析--master和worker进程间的通信
- Nginx源码分析-master和worker进程间的通信
- 关于nginx源码的分析和go语言学习
- js中如何实现md5加密
- JS正则表达式大全(整理详细且实用)
- 2016年5月13日学习笔记
- Opengl的坑——A卡N卡实现
- Http Status Code(状态码)
- nginx的源码分析--间接回调机制的使用和类比
- jQuery源码学习
- JAVA实验报告
- 利用代码动态修改log4j
- BroadcastReceiver使用完全解析
- GCD 同步 异步 串行 并发的使用方法.例子 和特点
- jquery旋转插件 rotate
- springMVC 返回类型选择
- extjs renderer格式化在使用 rowediting cellediting注意