模块 -- 5




概述监听连接数组、复用连接队列、模块配置上下文初始化上篇日志中,我们对 nginx 各模块初始化有了大致的了解,可是在循环中究竟做了什么呢?我们需要仔细观察 ngx_init_cycle 是 nginx 初始化进程中最重要的一个环节,其中对模块配置文件的创建和初始化以及对模块的初始化就是这个初始化函数中最重要的环节了在调用 ngx_init_cycle 前,首先对所有模块进行了编号:// objs/ngx_modules.c // ngx_module_t *ngx_modules[] {{{ // &ngx_core_module, // NGX_CORE_MODULE // &ngx_errlog_module, // NGX_CORE_MODULE // &ngx_conf_module, // NGX_CONF_MODULE // &ngx_events_module, // NGX_CORE_MODULE // &ngx_event_core_module, // NGX_EVENT_MODULE // &ngx_epoll_module,
#技术帖    #龙潭书斋    #nginx    #源码   

200x200


nginx 模块结构图  nginx 模块数组在 nginx.c 中,首次使用下面的循环为所有的模块编号:for (i = 0; ngx_m

#技术帖    #龙潭书斋    #nginx    #源码   
概述在 nginx 初始化流程的介绍中,我们已经看到 nginx module 是怎么初始化和加载的,nginx module 提供了抽象的接口,由各个实际的模块实现者去实现相应的接口,当然,事件模块也是如此 EPOLL 模块 module 定义// struct ngx_event_module_t // 事件模块结构体 {{{ typedef struct { // 模块名称 ngx_str_t *name; // 解析配置前,用于创建存储配置项参数结构体的回调函数 void *(*create_conf)(ngx_cycle_t *cycle); // 解析配置完成后,用于综合处理某些配置项 char *(*init_conf)(ngx_cycle_t *cycle, void *conf); // 对于事件驱动机制,每个事件需要实现的 10 个抽象方法 ngx_event_actions_t actions; } ngx_event_module_t; // }}}  在事件模块结构体的最后定义了 
#技术帖    #龙潭书斋    #io    #epoll   

200x200


nginx 事件处理框架事件处理框架解决的问题是事件的收集、管理和分发nginx 事件处理模块主要处理的是网络事件和定时器事件 多平台兼容不同的操作系统中,nginx&n

#读书笔记    #技术帖    #epoll    #nginx   
事件驱动函数 ngx_process_events_and_timers初始化流程结束后,设置进程名为 nginx: worker process 后就进入主循环在进入主循环之前,如果 nginx 是以线程模式启动的,则首先会进行线程初始化,这里我们不做讲解,后续讲解线程模式 nginx 的时候我们再重新会看这里的代码 // void ngx_process_events_and_timers(ngx_cycle_t *cycle) // 事件驱动函数 {{{ void ngx_process_events_and_timers(ngx_cycle_t *cycle) { ngx_uint_t flags; ngx_msec_t timer, delta; if (ngx_timer_resolution) { timer = NGX_TIMER_INFINITE; flags = 0; } else { timer = ngx_event_find_timer(); flags = NGX_UPDATE_TIME; #if (NGX_THREADS) if (
#读书笔记    #技术帖    #linux    #unix   



京ICP备15018585号