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

来源:互联网 发布:ubuntu libxml2devel 编辑:程序博客网 时间:2024/05/23 14:56

《深入理解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工程来学习

0 0
原创粉丝点击