该结构体是整个Nginx模块化架构最基本的数据结构体。它描述了Nginx程序中一个模块应该包括的基本属性,在tengine/src/core/ngx_conf_file.h中定义了该结构体

 struct ngx_module_s {
ngx_uint_t ctx_index; // 所属分类标识.Nginx的模块分为4种,分别是core,http,event和mail,每个模块在使用的技术各不尽相同
ngx_uint_t index; //模块计数器,Nginx为了方便管理模块,定义了一个存放所有模块的数组ngx_modules[];
// /objs/ngx_modules.c包含了此版本快速编译后所有模块的声明。 ngx_uint_t spare0;
ngx_uint_t spare1;
ngx_uint_t abi_compatibility; ngx_uint_t major_version; //模块版本
ngx_uint_t minor_version; void *ctx; //模块上下文,不同模块的模块上下文结构不同
ngx_command_t *commands; // 模块支持的命令集
ngx_uint_t type; // 模块的种类
//回调函数 如果该模块需要发生这些行为时执行特定的功能,可以通过这些回调函数指针注册一个回调函数接口
// 来实现
ngx_int_t (*init_master)(ngx_log_t *log); // 主进程初始化时调用 ngx_int_t (*init_module)(ngx_cycle_t *cycle); // 模块初始化时调用 ngx_int_t (*init_process)(ngx_cycle_t *cycle); // 工作进程初始化时调用
ngx_int_t (*init_thread)(ngx_cycle_t *cycle); // 线程初始化时调用
void (*exit_thread)(ngx_cycle_t *cycle); // 线程退出时调用
void (*exit_process)(ngx_cycle_t *cycle); // 工作进程退出时调用 void (*exit_master)(ngx_cycle_t *cycle); // 主进程退出时调用
// 以下预留成员暂未使用
uintptr_t spare_hook0;
uintptr_t spare_hook1;
uintptr_t spare_hook2;
uintptr_t spare_hook3;
uintptr_t spare_hook4;
uintptr_t spare_hook5;
uintptr_t spare_hook6;
uintptr_t spare_hook7;
};

该结构体在初始化时,需要用到两个宏定义,在该文件中也能找到:

 #define NGX_MODULE_V1          0, 0, 0, 0,                              \
NGX_DSO_ABI_COMPATIBILITY, NGX_NUMBER_MAJOR, NGX_NUMBER_MINOR //前七个成员的初始化
#define NGX_MODULE_V1_PADDING 0, 0, 0, 0, 0, 0, 0, 0 //后八个成员的初始化

Nginx源码分析-ngx_module_s结构体的更多相关文章

  1. nginx源码分析-源码结构

    本文主要简单介绍nginx源码目录结构.程序编译流程.如何构建学习nginx的环境等.本文以及后续nginx源码分析文章是基于nginx当前(2009-02-27)的稳定版本0.6.35进行的分析,该 ...

  2. Nginx源码分析:3张图看懂启动及进程工作原理

    编者按:高可用架构分享及传播在架构领域具有典型意义的文章,本文由陈科在高可用架构群分享.转载请注明来自高可用架构公众号「ArchNotes」.   导读:很多工程师及架构师都希望了解及掌握高性能服务器 ...

  3. nginx源码分析线程池详解

    nginx源码分析线程池详解 一.前言     nginx是采用多进程模型,master和worker之间主要通过pipe管道的方式进行通信,多进程的优势就在于各个进程互不影响.但是经常会有人问道,n ...

  4. nginx源码分析之网络初始化

    nginx作为一个高性能的HTTP服务器,网络的处理是其核心,了解网络的初始化有助于加深对nginx网络处理的了解,本文主要通过nginx的源代码来分析其网络初始化. 从配置文件中读取初始化信息 与网 ...

  5. nginx源码分析--使用GDB调试(strace、 pstack )

    nginx源码分析--使用GDB调试(strace.  pstack ) http://blog.csdn.net/scdxmoe/article/details/49070577

  6. nginx源码分析—内存池结构ngx_pool_t及内存管理

    Content 0. 序 1. 内存池结构 1.1 ngx_pool_t结构 1.2 其他相关结构 1.3 ngx_pool_t的逻辑结构 2. 内存池操作 2.1 创建内存池 2.2 销毁内存池 2 ...

  7. [nginx] nginx源码分析--SNI性能分析

    概念 我们已经知道什么是SNI,以及如何为用户配置SNI. [nginx] nginx使用SNI功能的方法 问题 通过观察配置文件,可以发现,针对每一个SSL/TLS链接, nginx都会动态的查找( ...

  8. Nginx源码分析--数组(转)

    原文地址:http://blog.csdn.net/marcky/article/details/5747431 备注:以下关于Nginx源码的分析基于淘宝开源项目Tengine. Nginx中对数组 ...

  9. nginx源码分析之hash的实现

    nginx实现了自己的hash数据结构,正如数据结构中讲述的那样,nginx用开放链表法解决冲突,不过不同的是一旦一个hash表被初始化后就不会被修改,即插入和删除,只进行查询操作,所以nginx通过 ...

随机推荐

  1. Django之form表单提交并验证

    1.提交的时候会报错 2. 需要在setting里面注释掉一句话,关闭跨站请求检查. 3. 注释掉以后,理论上就不报错了.可我还是卡壳了. 4. 通过在网上找方法,修复错误. 原因:表单action字 ...

  2. 【比赛】HNOI2018 游戏

    考试的时候线段树区间查询的return条件打成了l==r....于是光荣爆20(线段树都不会打了?) 看膜博士的题解 #include<bits/stdc++.h> #define ui ...

  3. 基于数组实现Java 自定义Stack栈类及应用

    栈是存放对象的一种特殊容器,在插入与删除对象时,这种结构遵循后进先出( Last-in-first-out,LIFO)的原则.java本身是有自带Stack类包,为了达到学习目的已经更好深入了解sta ...

  4. 【BZOJ4129】Haruna’s Breakfast(树上莫队)

    [BZOJ4129]Haruna's Breakfast(树上莫队) 题面 BZOJ Description Haruna每天都会给提督做早餐! 这天她发现早饭的食材被调皮的 Shimakaze放到了 ...

  5. Insert Node in Sorted Linked List

    Insert a node in a sorted linked list. Have you met this question in a real interview?  Yes Example ...

  6. CentOS7.4 删除virbr0虚拟网卡

    在CentOS 7的安装过程中如果有选择相关虚拟化的的服务安装系统后,启动网卡时会发现有一个以网桥连接的私网地址的virbr0网卡,这个是因为在虚拟化中有使用到libvirtd服务生成的,如果不需要可 ...

  7. 使当前对象相对于上层DIV 水平、垂直居中定位

    <!doctype html> <html> <head> <meta http-equiv="content-type" content ...

  8. json数据的格式

    JSON的具体形式 1.对象是一个无序的“‘名称/值’对”集合.一个对象以“{”开始,以“}”结束.每个“名称”后跟一个“:”,“‘名称/值’对”之间使用“,”分隔. 举个例子: { name:&qu ...

  9. python练习1--用户登入

    python版本为python3.51.要求 1)输入用户名密码 2)认证成功后显示欢迎信息 3)输错三次后锁定 2.需求分析 1)用户信息存储在文件中(login/config/user_login ...

  10. Eclipse错误笔记!

    1.ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2   JDWP exit error ...