菜鸟nginx源码剖析框架篇-main函数.docx

菜鸟nginx源码剖析框架篇-main函数.docx

ID:51715118

大小:219.54 KB

页数:28页

时间:2020-03-15

菜鸟nginx源码剖析框架篇-main函数.docx_第1页
菜鸟nginx源码剖析框架篇-main函数.docx_第2页
菜鸟nginx源码剖析框架篇-main函数.docx_第3页
菜鸟nginx源码剖析框架篇-main函数.docx_第4页
菜鸟nginx源码剖析框架篇-main函数.docx_第5页
资源描述:

《菜鸟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) 用上面收集的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。