Ubuntu 下 nginx-1.24.0 源码分析 - ngx_cycle_t 类型
ngx_cycle_t
定义在 src/core/ngx_core.h
typedef struct ngx_cycle_s ngx_cycle_t;
ngx_cycle_s
定义在 src/core/ngx_cycle.h
struct ngx_cycle_s { void ****conf_ctx; ngx_pool_t *pool; ngx_log_t *log; ngx_log_t new_log; ngx_uint_t log_use_stderr; /* unsigned log_use_stderr:1; */ ngx_connection_t **files; ngx_connection_t *free_connections; ngx_uint_t free_connection_n; ngx_module_t **modules; ngx_uint_t modules_n; ngx_uint_t modules_used; /* unsigned modules_used:1; */ ngx_queue_t reusable_connections_queue; ngx_uint_t reusable_connections_n; time_t connections_reuse_time; ngx_array_t listening; ngx_array_t paths; ngx_array_t config_dump; ngx_rbtree_t config_dump_rbtree; ngx_rbtree_node_t config_dump_sentinel; ngx_list_t open_files; ngx_list_t shared_memory; ngx_uint_t connection_n; ngx_uint_t files_n; ngx_connection_t *connections; ngx_event_t *read_events; ngx_event_t *write_events; ngx_cycle_t *old_cycle; ngx_str_t conf_file; ngx_str_t conf_param; ngx_str_t conf_prefix; ngx_str_t prefix; ngx_str_t error_log; ngx_str_t lock_file; ngx_str_t hostname; };
它用于管理 Nginx 的运行时上下文,包含了 Nginx 在运行过程中所需的各种资源和配置信息
它的主要作用包括:
- 管理模块配置 :存储各个模块的配置上下文。
- 管理内存池 :提供内存分配和释放的功能。
- 管理日志系统 :记录运行时的日志信息。
- 管理连接和事件 :处理客户端连接和事件驱动模型。
- 管理监听端口和文件 :存储监听套接字、打开的文件等信息。
- 支持动态更新 :在重新加载配置时,保存旧的上下文以便平滑切换。
成员变量详解
1. 配置相关
void ****conf_ctx;
- 含义 : 指向一个四维指针数组,用于存储各个模块的配置上下文。
- 作用 : 每个模块可以通过
conf_ctx
访问自己的配置数据。- 背景 : Nginx 的模块化设计使得每个模块可以有自己的配置结构,
conf_ctx
是这些配置的统一入口。
ngx_str_t conf_file;
- 含义 : 配置文件的路径。
- 作用 : 指定 Nginx 使用的主配置文件(如
nginx.conf
)。
ngx_str_t conf_param;
- 含义 : 命令行传递的额外配置参数。
- 作用 : 允许通过命令行覆盖部分配置。
ngx_str_t conf_prefix;
- 含义 : 配置文件的前缀路径。
- 作用 : 用于解析相对路径的配置文件。
ngx_str_t prefix;
- 含义 : Nginx 安装目录的前缀路径。
- 作用 : 用于定位安装目录下的文件(如日志文件、锁文件等)。
2. 内存管理
ngx_pool_t *pool;
- 含义 : 内存池对象。
- 作用 : 提供高效的内存分配和释放功能,避免频繁调用系统级别的
malloc
和free
。
3. 日志系统
ngx_log_t *log;
- 含义 : 当前使用的日志对象。
- 作用 : 用于记录运行时的日志信息。
ngx_log_t new_log;
- 含义 : 新的日志对象。
- 作用 : 在重新加载配置时,可能会创建新的日志对象。
ngx_uint_t log_use_stderr;
- 含义 : 是否将日志输出到标准错误(
stderr
)。- 作用 : 控制日志的输出方式。
4. 连接与事件管理
ngx_connection_t **files;
- 含义 : 文件描述符到连接对象的映射表。
- 作用 : 快速查找某个文件描述符对应的连接。
ngx_connection_t *free_connections;
- 含义 : 空闲连接链表。
- 作用 : 管理未被使用的连接对象,提高连接复用效率。
ngx_uint_t free_connection_n;
- 含义 : 空闲连接的数量。
- 作用 : 统计当前可用的空闲连接数。
ngx_connection_t *connections;
- 含义 : 所有连接对象的数组。
- 作用 : 管理所有活动的连接。
ngx_event_t *read_events;
- 含义 : 读事件数组。
- 作用 : 存储所有读事件。
ngx_event_t *write_events;
- 含义 : 写事件数组。
- 作用 : 存储所有写事件。
5. 模块管理
ngx_module_t **modules;
- 含义 : 模块数组。
- 作用 : 存储所有已加载的模块。
ngx_uint_t modules_n;
- 含义 : 模块数量。
- 作用 : 统计已加载的模块总数。
ngx_uint_t modules_used;
- 含义 : 模块是否已被使用。
- 作用 : 标记模块的状态。
6. 可复用连接管理
ngx_queue_t reusable_connections_queue;
- 含义 : 可复用连接队列。
- 作用 : 管理可复用的连接,提高连接复用效率。
ngx_uint_t reusable_connections_n;
- 含义 : 可复用连接的数量。
- 作用 : 统计当前可复用的连接数。
time_t connections_reuse_time;
- 含义 : 连接复用的时间限制。
- 作用 : 控制连接复用的时间窗口。
7. 监听与文件管理
ngx_array_t listening;
- 含义 : 监听端口数组。
- 作用 : 存储所有监听的套接字信息。
ngx_array_t paths;
- 含义 : 路径数组。
- 作用 : 存储需要监控的路径(如临时文件路径)。
ngx_list_t open_files;
- 含义 : 打开的文件列表。
- 作用 : 管理所有打开的文件。
ngx_list_t shared_memory;
- 含义 : 共享内存列表。
- 作用 : 管理共享内存区域。
8. 动态更新支持
ngx_cycle_t *old_cycle;
- 含义 : 旧的
cycle
对象。- 作用 : 在重新加载配置时,保存旧的上下文以便平滑切换。
9. 锁与主机名
ngx_str_t lock_file;
- 含义 : 锁文件路径。
- 作用 : 用于进程间同步。
ngx_str_t hostname;
- 含义 : 主机名。
- 作用 : 存储当前服务器的主机名。