nginx结构体习惯定义为_s,然后使用typedef转换为_t,如typedef struct ngx_array_s ngx_array_t
ngx_array_t结构体
struct ngx_array_s {
void *elts;
ngx_uint_t nelts;
size_t size;
ngx_uint_t nalloc;
ngx_pool_t *pool;
};
下面分别说明各字段的含义:
elts: 指向实际的数据存储区域;
nelts: 数组实际元素个数。
size: 数组单个元素的大小,单位是字节。
nalloc: 数组的容量。表示该数组在不引发扩容的前提下,可以最多存储的元素的个数。当nelts增长到达nalloc 时,如果再往此数组中存储元素,则会引发数组的扩容。数组的容量将会扩展到原有容量的2倍大小。实际上是分配新的一块内存,新的一块内存的大小是原有内存大小的2倍。原有的数据会被拷贝到新的一块内存中。
pool:该数组用来分配内存的内存池。
ngx_str_t结构体
在nginx源码目录的src/core下面的ngx_string.h|c里面,包含了字符串的封装以及字符串相关操作的api。nginx提供了一个带长度的字符串结构ngx_str_t,它的原型如下:
typedef struct {
size_t len;
u_char *data;
} ngx_str_t;
ngx_cycle_s结构体
该结构体是Nginx程序启动过程中使用的主要结构体。Nginx程序启动的核心过程基本上是围绕该结构体开始的。我们在/nginx/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;
****conf_ctx,以数组的形式存放所有模块的上下文,每个模块对应于数组中的一个元素。
*pool,指向Nginx程序使用的内存池首地址。
*log和new_log,保存Nginx日志属性和内容。
ngx_connection_t **files;
ngx_connection_t *free_connections;
ngx_uint_t free_connection_n;
ngx_queue_t reusable_connections_queue;
**files,最终指向建立的网络连接列表。
*free_connections和free_connection_n,指向空闲的网络链接和存放空闲链接计数。
reusable_connections_queue,可重用网络连接队列。
ngx_array_t listening;
ngx_array_t paths;
ngx_list_t open_files;
ngx_list_t shared_memory;
listening,存放监听socket的数组。元素的类型为ngx_listening_t结构体。
paths,存放缓存在磁盘上的路径的数组。元素的类型为ngx_path_t结构体。
open_files和files_n,存放所有打开的文件描述符的列表,保存打开文件的个数。
shared_memory,存放Nginx程序在运行过程中使用的所有共享内存区域的列表。元素的类型为ngx_shm_zone_t结构体。
ngx_uint_t connection_n;
ngx_uint_t files_n;
ngx_connection_t *connections;
ngx_event_t *read_events;
ngx_event_t *write_events;
connection_n,Nginx服务器当前建立的网络连接计数。
*connections,存放Nginx服务器网络连接的链表。ngx_connection_t结构体的定义细节参见本章上一节的相关内容。
*read_events,存放事件驱动模型涉及的读事件。每个网络连接关联一个读事件。ngx_event_t结构体的定义细节参见11.6节的相关内容。
*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 lock_file;
ngx_str_t hostname;
;
*old_cycle,缓存过时的全局信息。
conf_file、conf_param和conf_prefix,存放配置文件的内容、参数及前缀等信息。如果配置是默认的,则直接从Nginx编译后目录中的objs/ngx_auto_conf.h文件加载。
prefix,存放Nginx系统安装的路径。
lock_file,存放Nginx程序的锁文件。
hostname,存放Nginx程序运行所在环境的主机名。
该结构体中存储了Nginx服务器在运行过程中所需的全局变量。