Nginx框架是围绕着 ngx_cycle_t 结构体来控制进程运行的。ngx_cycle_t结构体的prefix、conf prefix、conf_file等字符串类型成员保存着Nginx配置文件的路径,Nginx的可配置性完全依赖于nginx.conf配置文件,Nginx所有模块的可定制性、可伸缩性等诸多特性也是依赖于nginx.conf配置文件的,可以想见,这个配置文件路径必然是...
* 旧的 ngx_cycle_t 对象用于引用上一个 ngx_cycle_t 对象中的成员。例如 * ngx_init_cycle 方法,在启动初期,需要建立一个临时的 ngx_cycle_t 对象 * 保存一些变量,再调用 ngx_init_cycle 方法时就可以把旧的 ngx_cycle_t * 对象传进去,而这时 old_cycle 对象就会保存这个前期的 ngx_cycle_t 对象 *...
变量的初始化存储在ngx_cycle_t这个结构体中,为了深入了解这个函数都做了那些初始化工作,就化时间研究了一下。并写下来以便以后參考。 1ngx_cycle_t 关于这个结构体前面已经简介过,这里不再赘述。 2ngx_init_cycle ngx_cycle_t * ngx_init_cycle(ngx_cycle_t *old_cycle); 先看一下这个old_cycle參数从哪里...
最近在开始看nginx的事件模块,经常看到ngx_cycle_t、ngx_connection_t和ngx_listening_t这三个结构体,刚开始没在意,看到了就重新上网变量的意思,后来觉得不弄懂这三个结构体或者不清出其中变量的意义实在是无法看下去,因为有很多函数都涉及这三个结构体。因为ngx_listening_t存储监听有关的信息,ngx_connection_t存储...
ngx_cycle_t *cycle, init_cycle; init_cycle.pool = ngx_create_pool(1024, log);//创建内存池 if (init_cycle.pool == NULL) { return 1; } ... ... if (ngx_process_options(&init_cycle) != NGX_OK) { return 1; } cycle
ngx_cycle_t是 Nginx 运行时的核心结构,保存所有配置和运行时状态。 2.6if (cycle == NULL) { ngx_destroy_pool(pool); return NULL; } 检查cycle分配是否成功, 分配失败时释放已创建的内存池,避免内存泄漏。 通过返回NULL通知上层初始化失败。 ngx_destroy_pool ...
shared_memory链表元素结构为ngx_shm_zone_t; listening数组元素结构为ngx_listening_t,该数组用来存放监听套接字。 再来看下ngx_init_cycle函数的处理过程: 1.调用ngx_timezone_update()、ngx_timeofday()和ngx_time_update(0, 0)做时间校准; 2.创建一个新的ngx_cycle_t变量cycle,并且初始化其大部分的成员字...
作用:指向全局运行时上下文ngx_cycle_t,保存 Nginx 的核心运行时数据。 内容:包括模块配置、监听套接字、共享内存、日志等全局信息。 意义:配置解析过程中需要访问或修改全局状态时使用(如添加监听端口)。 4.ngx_pool_t *pool 作用:主内存池,用于分配持久化内存(生命周期与配置解析过程一致)。
//直接发送网络字节流 ngx_recv_chain_pt recv_chain; //网络字节流接收链表 ngx_send_chain_pt send_chain; //网络字节流发送链表 /*用来将当前连接以双向链表元素的形式添加到ngx_cycle_t核心结构体 * 的reuseable_connection_queue双向链表中,表示可以重用的连接*/ ngx_queue_t queue; /* 省去部分 */ ...
ngx_log_error(NGX_LOG_CRIT, cycle->log, ngx_socket_errno, "getsockname() of the inherited " "socket #%d failed", ls[i].fd); // 获取本地地址失败, 置ngx_listening_t结构体的ignore成员为1, 即表示忽略 ls[i].ignore = 1; continue; } addr_in = (struct sockaddr_in *) ls[i].socka...