为什么Nginx重新定义事件处理程序?

时间:2019-04-18 18:16:07

标签: nginx

我试图了解nginx如何处理事件,并且对nginx为什么重新定义事件处理程序有一个特定的问题。

发现:

  • Nginx事件循环从ngx_epoll_process_events()@ src / event / modules / ngx_epoll_module.c开始,其中nginx轮询新事件。
  • 一旦新事件出队,nginx会在事件对象“ handler”中使用函数ptr来执行分配的事件处理程序,如下所示:
rev->handler(rev);
  • 最常见的事件处理程序之一是src / http / ngx_http_request.c中的“ ngx_http_wait_request_handler()”。

问题:

  • 在事件处理函数ngx_http_wait_request_handler()结束时,我不明白为什么代码在调用下一个函数之前重新定义了事件指针
rev->handler = ngx_http_process_request_line;
ngx_http_process_request_line(rev);
  • 如我们所见,由于该程序仅在此后立即执行调用指令,因此未使用此函数指针。因此,我不确定这项任务的目的。
  • 我仔细阅读了代码并遵循了执行流程,但没有找到这种行为背后的原因

其他信息:

  • 以上场景在以下位置重复:
    • 在ngx_http_process_request_line()@ src / http / ngx_http_request.c内
rev->handler = ngx_http_process_request_headers;
ngx_http_process_request_headers(rev);
  • 在ngx_http_process_request()@ src / http / ngx_http_request.c内
c->read->handler = ngx_http_request_handler;
c->write->handler = ngx_http_request_handler;
r->read_event_handler = ngx_http_block_reading;

ngx_http_handler(r);
ngx_http_run_posted_requests(c);

TLDR;为什么nginx在事件处理过程中重新定义了event-> handler(函数ptr)?

0 个答案:

没有答案