nginx 源代码分析 (三)

2021-06-19  本文已影响0人  RonZheng2010

1. ngx_event_core_module

nginx处理事件的接口是ngx_event_core_module模块。但不同系统上的系统接口不同,如epoll、select、kqueue等,每种接口都有自己的实现模块。ngx_event_core_module把事件处理委托给当前的实现。这里的实现模块使用ngx_epoll_module。

ngx_module_t  ngx_event_core_module;
ngx_module_t ngx_epoll_module;

2. ngx_event_t

ngx_event_t用于保存处理事件的处理函数。

init_cycle.read_events[]和init_cycle.write_events[]是ngx_event_t数组,与
Init_cycle.connections[]大小相同,都是ngx_cycle_t.connection_n,并且元素一一对应。

3. ngx_event_module_init()

ngx_event_module_init()的主要工作是得到系统的资源限制值。

4. ngx_event_process_init()

ngx_event_module_init()的步骤如下。

4.1 ngx_epoll_init()

ngx_epoll_init()的步骤如下。

struct epoll_event* event_list;
ngx_uint_t nevents;
ngx_os_io_t ngx_os_io = {
ngx_unix_recv,
ngx_readv_chain,
ngx_udp_unix_recv,
ngx_unix_send,
...
};
ngx_event_actions_t ngx_event_actions;

4.2 ngx_get_connection()

ngx_get_connection() 从init_cycle.free_connections[]数组中得到空闲连接。

5. ngx_add_event()

ngx_epoll_add_event() 开始按要求监听ngx_connection_t实例的事件。参数event是监听的事件类型,如可读、可写等。

ngx_int_t ngx_epoll_add_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags);

6. ngx_process_events()

ngx_epoll_process_events() 处理事件。

上一篇下一篇

猜你喜欢

热点阅读