添加event模块和其他模块一样,都是一个流程
Event模块配置的初始化
1. ngx_events_module 模块配置初始化
ngx_init_cycle方法中的模块初始化。ngx_events_module类型为NGX_CORE_MODULE,所以在ngx_init_cycle中就会进行核心模块的初始化。
但是ngx_events_module中的create_conf方法为NULL,所以不会调用创建配置的方法。
2. ngx_conf_parse 解析顶层“event”的配置
ngx_init_cycle方法中会调用ngx_conf_parse方法,并且解析的/usr/local/nginx/conf/nginx.conf配置文件。此次调用只解析最顶层的配置信息“events”,而不会解析{}块中的内容
3. ngx_events_block 解析events块block中的内容
ngx_events_block方法为ngx_events_commands命令集的回调函数。在最顶层解析nginx.conf文件的时候,会进行核心模块的命令集遍历。(参考: Nginx源码分析 - 主流程篇 - 解析配置文件 中的ngx_conf_handler) 会遍历模块命令集的cmd->set方法。
ngx_events_block中主要创建ngx_event_core_module事件的核心模块以及配置信息。
4. ngx_event_core_create_conf和ngx_event_core_init_conf
- ngx_event_core_create_conf:主要是创建event事件核心模块
- ngx_event_core_init_conf:初始化event事件核心模块
nginx_event.c文件中的ngx_process_events_and_timers进程事件分发器
ngx_event.c :这个文件主要放置Nginx事件event模块的核心代码。包含:进程事件分发器(ngx_process_events_and_timers)、事件模块的模块和配置、模块初始化/配置初始化等事件模块初始化的核心函数。
ngx_event_timer.c:定时器事件管理。主要放置定时器的代码。
ngx_event_posted.c:主要用于 拿到accept锁的进程 处理accept和read事件的回调函数。上一章惊群处理中,有重点提到ngx_event_process_posted这个方法。
ngx_event_pipe.c:主要用于处理管道。
ngx_event_openssl.c:主要用于处理SSL通道。HTTPS协议。
ngx_event_connect.c:主要用于处理TCP的连接通道。
ngx_event_accept.c:核心是ngx_event_accept和ngx_event_recvmsg,主要是处理accept事件的回调函数handler。而后续的read事件被ngx_event_accept中回调ngx_listen_t结构中的ls->handler回调函数回调,并且将rev->handler修改成ngx_http_wait_request_handler方法。
modules/xxxx.c:主要封装了各种平台的事件模型。我们这边主要看ngx_epoll_module.c模块。



