该结构体是整个Nginx模块化架构最基本的数据结构体。它描述了Nginx程序中一个模块应该包括的基本属性,在tengine/src/core/ngx_conf_file.h中定义了该结构体
105
struct
ngx_module_s {
106
ngx_uint_t ctx_index; // 所属分类标识.Nginx的模块分为4种,分别是core,http,event和mail,每个模块在使用的技术各不尽相同
107
ngx_uint_t index; //模块计数器,Nginx为了方便管理模块,定义了一个存放所有模块的数组ngx_modules[];
// /objs/ngx_modules.c包含了此版本快速编译后所有模块的声明。
108
109
ngx_uint_t spare0;
110
ngx_uint_t spare1;
111
ngx_uint_t abi_compatibility;
112
113
ngx_uint_t major_version; //模块版本
114
ngx_uint_t minor_version;
115
116
void *ctx; //模块上下文,不同模块的模块上下文结构不同
117 ngx_command_t *commands; // 模块支持的命令集
118 ngx_uint_t type; // 模块的种类
119 //回调函数 如果该模块需要发生这些行为时执行特定的功能,可以通过这些回调函数指针注册一个回调函数接口
// 来实现
120 ngx_int_t (*init_master)(ngx_log_t *log); // 主进程初始化时调用
121122 ngx_int_t (*init_module)(ngx_cycle_t *cycle); // 模块初始化时调用
123124 ngx_int_t (*init_process)(ngx_cycle_t *cycle); // 工作进程初始化时调用
125 ngx_int_t (*init_thread)(ngx_cycle_t *cycle); // 线程初始化时调用
126void (*exit_thread)(ngx_cycle_t *cycle); // 线程退出时调用
127void (*exit_process)(ngx_cycle_t *cycle); // 工作进程退出时调用
128129void (*exit_master)(ngx_cycle_t *cycle); // 主进程退出时调用
130 // 以下预留成员暂未使用
131 uintptr_t spare_hook0;
132 uintptr_t spare_hook1;
133 uintptr_t spare_hook2;
134 uintptr_t spare_hook3;
135 uintptr_t spare_hook4;
136 uintptr_t spare_hook5;
137 uintptr_t spare_hook6;
138 uintptr_t spare_hook7;
139 };
该结构体在初始化时,需要用到两个宏定义,在该文件中也能找到:
101
#define NGX_MODULE_V1 0, 0, 0, 0, 102 NGX_DSO_ABI_COMPATIBILITY, NGX_NUMBER_MAJOR, NGX_NUMBER_MINOR //前七个成员的初始化
103#define NGX_MODULE_V1_PADDING 0, 0, 0, 0, 0, 0, 0, 0 //后八个成员的初始化
原文:http://www.cnblogs.com/hubavyn/p/4433342.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!