nginx 常见的结构体

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





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值