Open vislee opened 6 years ago
nginx作为代理服务器,处理网络读写事件是其核心。在linux平台上使用epoll管理网络读写事件使得nginx有很高的性能,再配合定时器事件可以实现一些超时和控制速率的一些功能。
而nginx又是如何使用epoll,又是何时添加可读、可写、定时事件的呢?
以下是部分事件的回调函数,缩进代表了调用层级。 后续会补充对应事件是被何时添加到epoll中的,是使用的水平触发还是边沿触发。定时器是何时使用的。
// 监听的fd事件回调 listen:rev->handler = ngx_event_accept; // -> ls->handler(); ls->handler = ngx_http_init_connection; // 建立起连接的fd的事件回调http模块 connect: c->recv = ngx_recv; c->rev->handler = ngx_http_wait_request_handler; r->read_event_handler = ngx_http_block_reading; c->rev->handler = ngx_http_process_request_line; c->rev->handler = ngx_http_process_request_headers; ngx_http_process_request_header(); ngx_http_process_request(); c->read->handler = ngx_http_request_handler; r->read_event_handler = ngx_http_block_reading; ngx_http_handler(r); ngx_http_core_run_phases(r); c->write->handler = ngx_http_empty_handler; c->write->handler = ngx_http_request_handler; r->write_event_handler = ngx_http_core_run_phases;
概述
nginx作为代理服务器,处理网络读写事件是其核心。在linux平台上使用epoll管理网络读写事件使得nginx有很高的性能,再配合定时器事件可以实现一些超时和控制速率的一些功能。
而nginx又是如何使用epoll,又是何时添加可读、可写、定时事件的呢?
代码分析
以下是部分事件的回调函数,缩进代表了调用层级。 后续会补充对应事件是被何时添加到epoll中的,是使用的水平触发还是边沿触发。定时器是何时使用的。
总结: