nginx基本数据结构ngx_module_t,ngx_module_s

ngx_module_t是nginx的模块化架构最 基本 数据结构 。 
结构 定义如下,其中的注释为功能说明: 
  1. struct ngx_module_s {  
  2.     ngx_uint_t            ctx_index;      
  3.     /*分类的模块计数器 
  4.     nginx模块可以分为四种:core、event、http和mail 
  5.     每个模块都会各自计数,ctx_index就是每个模块在其所属类组的计数*/  
  6.       
  7.     ngx_uint_t            index;          
  8.     /*一个模块计数器,按照每个模块在ngx_modules[]数组中的声明顺序,从0开始依次给每个模块赋值*/  
  9.   
  10.     ngx_uint_t            spare0;  
  11.     ngx_uint_t            spare1;  
  12.     ngx_uint_t            spare2;  
  13.     ngx_uint_t            spare3;  
  14.   
  15.     ngx_uint_t            version;      //nginx模块版本  
  16.   
  17.     void                 *ctx;            
  18.     /*模块的上下文,不同种类的模块有不同的上下文,因此实现了四种结构体*/  
  19.       
  20.     ngx_command_t        *commands;  
  21.     /*命令定义地址 
  22.     模块的指令集 
  23.     每一个指令在源码中对应着一个ngx_command_t结构变量*/  
  24.       
  25.     ngx_uint_t            type;         //模块类型,用于区分core event http和mail  
  26.   
  27.     ngx_int_t           (*init_master)(ngx_log_t *log);         //初始化master时执行  
  28.   
  29.     ngx_int_t           (*init_module)(ngx_cycle_t *cycle);     //初始化module时执行  
  30.   
  31.     ngx_int_t           (*init_process)(ngx_cycle_t *cycle);    //初始化process时执行  
  32.     ngx_int_t           (*init_thread)(ngx_cycle_t *cycle);     //初始化thread时执行  
  33.     void                (*exit_thread)(ngx_cycle_t *cycle);     //退出thread时执行  
  34.     void                (*exit_process)(ngx_cycle_t *cycle);    //退出process时执行  
  35.   
  36.     void                (*exit_master)(ngx_cycle_t *cycle);     //退出master时执行  
  37.   
  38. //以下功能不明  
  39.     uintptr_t             spare_hook0;  
  40.     uintptr_t             spare_hook1;  
  41.     uintptr_t             spare_hook2;  
  42.     uintptr_t             spare_hook3;  
  43.     uintptr_t             spare_hook4;  
  44.     uintptr_t             spare_hook5;  
  45.     uintptr_t             spare_hook6;  
  46.     uintptr_t             spare_hook7;  
  47. };  
  48.   
  49. typedef struct ngx_module_s      ngx_module_t;  

nginx定义了很多模块,每个模块都有自己所属的类型,可以定义一些属于自己的操作函数,通过把这些函数赋值为对应类型 结构 体中的函数指针,就可以注册了不同的回调函数接口,以此实现不同的功能,有点c++多态的感觉!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值