ngx_cycle_t -- 5




200x200


温馨提示点击图片可在新的页面打开,图片较大,打开较慢,请耐心等待 初始化流程init_cycle 初始化  ngx_init_cycle  

#技术帖    #linux    #unix    #龙潭书斋   
初始化收尾工作至此,我们的 ngx_init_cycle 函数已经执行到了尾声,这也意味着,初始化工作即将结束,那么,让我们来一起看看都有哪些工作需要在最后处理吧释放 old_cycle 中的共享内存/* close and delete stuff that lefts from an old cycle */ /* free the unnecessary shared memory */ opart = &old_cycle->shared_memory.part; oshm_zone = opart->elts; for (i = 0; /* void */ ; i++) { if (i >= opart->nelts) { if (opart->next == NULL) { goto old_shm_zone_done; } opart = opart->next; oshm_zone = opart->elts; i = 0; } part = &cycle->shared_memory.part; shm_zone = part->elts; for (n = 0; /* void */ ; n++) {
#技术帖    #network    #龙潭书斋    #服务器   
创建 socketfd,并且设置为监听状态作为一个web服务器,初始化中最重要的一步终于到来了// 为 cycle 中的每个监听目标创建 socket,并设置为监听状态 if (ngx_open_listening_sockets(cycle) != NGX_OK) { goto failed; } ngx_open_listening_sockets在这个函数中,有我们熟悉的 TCP 服务端初始化到监听状态的代码// ngx_int_t ngx_open_listening_sockets(ngx_cycle_t *cycle) // 创建 socket 并设置为监听状态 {{{ ngx_int_t ngx_open_listening_sockets(ngx_cycle_t *cycle) { int reuseaddr; ngx_uint_t i, tries, failed; ngx_err_t err; ngx_log_t *log; ngx_socket_t s; ngx_listening_t *ls; reuseaddr = 1; #if (NGX_SUPPRESS_WARN)
#技术帖    #network    #c语言    #socket   
监听连接数组初始化// 监听链接数组初始化 n = old_cycle->listening.nelts ? old_cycle->listening.nelts : 10; cycle->listening.elts = ngx_pcalloc(pool, n * sizeof(ngx_listening_t)); if (cycle->listening.elts == NULL) { ngx_destroy_pool(pool); return NULL; } cycle->listening.nelts = 0; cycle->listening.size = sizeof(ngx_listening_t); cycle->listening.nalloc = n; cycle->listening.pool = pool; 这段代码比较简单,主要是数组的创建和初始化操作复用连接队列初始化// nginx 复用连接队列初始化 ngx_queue_init(&cycle->reusable_connections_queue); 循环双向链表结构 -- ngx_queue_t复用连接队列是一个循环双向链表结构 ngx_queue_ttypedef struc
#技术帖    #龙潭书斋    #nginx    #opensource   
核心初始化工作下面就到了最核心的初始化过程了// 全部初始化工作,包括时间、内存池、配置文件、共享内存 // 、监听连接数组、所有模块的初始化, // 以及配置及log文件创建、连接开启监听 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; } 如注释中已经写的,这个函数进行了 nginx 最核心部分的初始化工作前面的日志中,我们说过,nginx 的整个初始化过程都是围绕全局变量 ngx_cycle 展开的,重点就在这个函数中ngx_cycle_t说到 ngx_cycle 变量就不得不说 ngx_cycle_t 类型,它记录了 nginx 所需的各种核心的信息// struct ngx_cycle_s // nginx 运行核心结构 {{{ struct ngx_cycle_s { void
#技术帖    #龙潭书斋    #nginx    #opensource   



京ICP备15018585号