nginx 常见的结构体

来源:互联网 发布:电子相册软件免费版 编辑:程序博客网 时间:2024/06/07 12:30

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服务器在运行过程中所需的全局变量。





原创粉丝点击