欢迎来到天天文库
浏览记录
ID:51715118
大小:219.54 KB
页数:28页
时间:2020-03-15
《菜鸟nginx源码剖析框架篇-main函数.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、菜鸟nginx源码剖析框架篇(一)从main函数看nginx启动流程 1.nginx的main函数解读nginx启动显然是由main函数驱动的,main函数在在core/nginx.c文件中,其源代码解析如下,涉及到的数据结构在本节仅指出其作用,将在第二节中详细解释。·nginxmain函数的流程图如下:需要说明的:·1)初始化错误提示列表,以errno为下标,元素就是对应的错误提示信息。·1:if(ngx_strerror_init()!=NGX_OK){2: return1;3:}2)获取命令行参数,保存在全局变量中,可以
2、设置的命令行参数如下表所示:·1:if(ngx_get_options(argc,argv)!=NGX_OK){2: return1;3: }命令行参数作用-h或-?显示版本信息和help信息-v显示版本信息-V显示nginx版本信息、编译器版本和配置选项信息-t测试配置文件信息是否OK,即检测配置文件语法的正确性,并尝试打开配置文件中所引用到的文件-q在测试配置文件的时候,屏蔽无错误信息,即quiet模式-ssignal发送信号到master进程(如stop、quit、reopen、reload)-pprefix设置前缀
3、路径(默认为当前目录)-cfilename设置配置文件(默认为conf/nginx.conf)-gdirectives在配置文件外设置全局的指令3)时间、正则表达式和log的初始化。1:ngx_time_init();2: 3:(NGX_PCRE)4:ngx_regex_init();5:if6: 7:ngx_pid=ngx_getpid();8: 9:log=ngx_log_init(ngx_prefix);10:if(log==NULL){11: return1;12:} 4)初始化cycle结构,并创建内存块大小为1
4、024的内存池,内存池创建已经在《菜鸟nginx源码剖析数据结构篇(九)内存池ngx_pool_t》讨论过了,nginx框架就是围绕着ngx_cycle_t结构体来控制运行的,其定义详情请参考下一节。1:ngx_memzero(&init_cycle,sizeof(ngx_cycle_t));2:init_cycle.log=log;3:ngx_cycle=&init_cycle;4: 5:init_cycle.pool=ngx_create_pool(1024,log);6:if(init_cycle.pool==NULL){7:
5、 return1;8:} 5) 将命令行参数保存到ngx_os_argv、ngx_argc以及ngx_argv这几个全局的变量中。这算是一个备份存储,方便以后master进程做热代码替换之用。1:if(ngx_save_argv(&init_cycle,argc,argv)!=NGX_OK){2: return1;3:}6)用命令行参数得来的全局变量初始化cycle的conf_prefix(配置文件所在路径的前缀)、prefix(nginx可执行文件所在路径)、conf_file(配置文件名)和conf_param(
6、通过命令行-g选项指定的全局配置信息)。1:if(ngx_process_options(&init_cycle)!=NGX_OK){2: return1;3:}7) 根据操作系统确定一些参数,信息会被保存到一些全局变量中,如页大小ngx_pagesize,CPUcacheline1:if(ngx_os_init(log)!=NGX_OK){2: return1;3:}8)初始化一个做循环冗余校验的表,由此可以看出后续的循环冗余校验将采用高效的查表法1:if(ngx_crc32_table_init()!=NGX_OK){
7、 2: return1; 3: }9)通过环境变量NGINX完成socket的继承,继承来的socket将会放到init_cycle的listening数组中。同时可以读取master进程传递的平滑升级信息等等1:if(ngx_add_inherited_sockets(&init_cycle)!=NGX_OK){ 2: return1; 3: } 10)初始化所有模块的index信息,即对所有模块进行编号,ngx_modules数却是在自动编译的时候生成的,位于objs/ngx_modules.c
8、文件中1:ngx_max_module=0;2:for(i=0;ngx_modules[i];i++){3: ngx_modules[i]->index=ngx_max_module++;4:}11) 用上面收集的
此文档下载收益归作者所有