您的位置:首页 > 运维架构 > Nginx

nginx学习笔记三(nginx启动框架的处理流程)

2016-05-09 16:23 323 查看
《深入理解nginx》中是用流程图+文字的形式讲解了nginx的启动框架处理流程(Page 275),我是结合源码对应着教材过了一篇nginx的启动流程,记录如下:

一.源码位置

main函数:nginx\src\core\nginx.c

ngx_init_cycle函数:nginx\src\core\Ngx_cycle.c

二.启动处理流程

1.解析命令行,处理参数
if (ngx_get_options(argc, argv) != NGX_OK) {
return 1;
}

if (ngx_show_version) {
ngx_show_version_info();

if (!ngx_test_config) {
return 0;
}
}

/* TODO */ ngx_max_sockets = -1;

ngx_time_init();
....
if (ngx_process_options(&init_cycle) != NGX_OK) {
return 1;
}

if (ngx_os_init(log) != NGX_OK) {
return 1;
}

/*
* ngx_crc32_table_init() requires ngx_cacheline_size set in ngx_os_init()
*/

if (ngx_crc32_table_init() != NGX_OK) {
return 1;
}

if (ngx_add_inherited_sockets(&init_cycle) != NGX_OK) {
return 1;
}

if (ngx_preinit_modules() != NGX_OK) {
return 1;
}
以上程序对应于《深入理解nginx》page 276图中的1,2两个步骤。

2.调用ngx_init_cycle方法初始化ngx_cycle_t结构体

cycle = ngx_init_cycle(&init_cycle);
if (cycle == NULL) {
if (ngx_test_config) {
ngx_log_stderr(0, "configuration file %s test failed",
init_cycle.conf_file.data);
}

return 1;
}


ngx_init_cycle函数完成了配置项解析等很多的事情,具体参见《深入理解nginx》

3.根据配置情况,以不同的方式运行nginx
if (ngx_process == NGX_PROCESS_SINGLE) {
ngx_single_process_cycle(cycle);

} else {
ngx_master_process_cycle(cycle);
}


注:阅读源码的过程中可以参考 https://github.com/y123456yz/reading-code-of-nginx-1.9.2 这个有注释的nginx工程来学习
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: