nginx模块开发入门(六)-3.1 Anatomy of a Handler (Non-proxying)
3. Handlers
接下来我们把模块的细节放到显微镜下面来看,它们到底怎么运行的。
3.1. 剖析Handler(非代理)
Anatomy of a Handler (Non-proxying)
Handler一般做4件事:获取location配置;生成合适的响应;发送响应头;发送响应体。Handler有一个参数,即请求结构体。请求结构体包含很多关于客户请求的有用信息,比如说请求方法,URI,请求头等等。我们一个个地来看。
3.1.1. 获取location配置
这部分很简单。只需要调用 ngx_http_get_module_loc_conf,传入当前请求的结构体和模块定义即可。下面是我的circle gif handler的相关部分:
return ngx_http_output_filter(r, &out);
Buffer链是Nginx IO模型中的关键部分,你得比较熟悉它的工作方式。
引用
问: 为什么buffer还需要有个`last_buf`变量啊,我们不是可以通过判断next是否是NULL来知道哪个是链表的最末端了吗?
答: 链表可能是不完整的,比如说,当有多个buffer的时候,并不是所有的buffer都属于当前的请求和响应。所以有些buffer可能是buffer链表的表尾,但是不是请求的结束。这给我们引入了接下来的内容……