ngxin源码分析(7)——请求处理
在建立连接过程中,对于nginx监听到的每个客户端连接,都会将它的读事件的handler设置为ngx_http_init_request函数,这个函数就是请求处理的入口。在处理请求时,主要就是要解析http请求,比如:uri,请求行等,然后再根据请求生成响应。下面看一下nginx处理的具体过程。
在ngx_http_init_connection函数中,将连接的读事件的handler设置为这个函数,在客户端发送请求时会被调用。
/* 遍历phase上注册的所有handler,这里是以r->phase_handler为索引组成的链表 */ while (ph[r->phase_handler].checker) { rc = ph[r->phase_handler].checker(r, &ph[r->phase_handler]); if (rc == NGX_OK) { return; } }
遍历phase上注册的所有handler,这里是以r->phase_handler为索引组成的链表。在调用每个handler的checker时会更新request的phase_handler,从而实现一个handler的链表。
在跑完所有的phase handler之后,这个请求就被处理完毕。实际的响应内容的输出,是在content phase的handler中调用filter输出实现的。下一篇文章会介绍nginx的phase handler的处理,后面还会介绍filter实现。