nigix学习框架

1、nigix初始化
nginx有5中类型的模块,"CORE","CONF","EVNT","HTTP","MAIL"   

2、数组结构ngx_array_t   

3、ngx_listening_s结构体中
unsigned  open:1;
这不是给open赋值,这是一种位域的结构体,这里的取值只能是0和1,因为它是用1位来表示的,使用位域可以节省很多空间。

4、hash结构ngx_hash_t  
Redis是一个高效的key-value缓存系统(后续可以研究下)--深入理解哈希表博客文章     

5、启动流程
•调用ngx_get_options()解析命令参数;
•调用ngx_time_init()初始化并更新时间,如全局变量ngx_cached_time;
•调用ngx_log_init()初始化日志,如初始化全局变量ngx_prefix,打开日志文件ngx_log_file.fd;
•清零全局变量ngx_cycle,并为ngx_cycle.pool创建大小为1024B的内存池;
•调用ngx_save_argv()保存命令行参数至全局变量ngx_os_argv、ngx_argc、ngx_argv中;
•调用ngx_process_options()初始化ngx_cycle的prefix, conf_prefix, conf_file, conf_param等字段;
•调用ngx_os_init()初始化系统相关变量,如内存页面大小ngx_pagesize,ngx_cacheline_size,最大连接数ngx_max_sockets等;
•调用ngx_crc32_table_init()初始化CRC表(后续的CRC校验通过查表进行,效率高);
•调用ngx_add_inherited_sockets()继承sockets; •解析环境变量NGINX_VAR="NGINX"中的sockets,并保存至ngx_cycle.listening数组;
•设置ngx_inherited=1;
•调用ngx_set_inherited_sockets()逐一对ngx_cycle.listening数组中的sockets进行设置;

•初始化每个module的index,并计算ngx_max_module;
•调用ngx_init_cycle()进行初始化; 
•该初始化主要对ngx_cycle结构进行;

•若有信号,则进入ngx_signal_process()处理;
•调用ngx_init_signals()初始化信号;主要完成信号处理程序的注册;
•若无继承sockets,且设置了守护进程标识,则调用ngx_daemon()创建守护进程;
•调用ngx_create_pidfile()创建进程记录文件;(非NGX_PROCESS_MASTER=1进程,不创建该文件)
•进入进程主循环; 
•若为NGX_PROCESS_SINGLE=1模式,则调用ngx_single_process_cycle()进入进程循环;
•否则为master-worker模式,调用ngx_master_process_cycle()进入进程循环;
  
6、如何发送信号     
ngx_signal_process()函数处理

该函数作用:
•读取ngx_core_module模块的配置结构ngx_core_conf_t;
•根据配置结构找到其工作进程文件,如"/usr/local/nginx/logs/nginx.pid"(该文件保存nginx进程ID,即pid);
•打开该文件,读取pid;
•调用ngx_os_signal_process()发送信号;

 ngx_os_signal_process()函数处理
•遍历signals数组,根据给定信号name,找到对应signo;
•调用kill向该pid发送signo号信号;

7、队列结构ngx_queue_t   
8、链表结构ngx_list_t
队列,链表操作部分仍需揣摩,设计思想很重要!!! 
目前主要分析了nginx源码,但还未在Linux环境下编译,后续安排时间调试及设计思想的总结。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值