|----------(ngx_worker_process_cycle->ngx_worker_process_init) |--------->for(;;) {ngx_process_events_and_timers()} ngx_start_worker_processes---| ngx_processes[]相关的操作赋值流程 |----------ngx_pass_open_channel 1.ngx_worker_process_init 工作进程初始化的时候,调用init_…
ngx_event.c :这个文件主要放置Nginx事件event模块的核心代码. 包含:进程事件分发器(ngx_process_events_and_timers).事件模块的模块和配置.模块初始化/配置初始化等事件模块初始化的核心函数. ngx_event_timer.c:定时器事件管理.主要放置定时器的代码. ngx_event_posted.c:主要用于 拿到accept锁的进程 处理accept和read事件的回调函数. ngx_event_pipe.c:主要用于处理管道 ngx_ev…
event事件模块,配置分为两层:ngx_events_module 事件模块 和 ngx_event_core_module 事件核心模块.ngx_events_module:模块类型NGX_CORE_MODULE,所以此模块在最外层核心模块解析"events"命令的时候会回调ngx_events_block函数.ngx_event_core_module:模块类型NGX_EVENT_MODULE,所以此模块在ngx_events_block函数被回调后,才能解析配置信息最外层的ev…
在 http 配置块中,我们配置了 http 连接相关的信息,HTTP 框架也正是从这里启动的 在 nginx 初始化的过程中,执行了 ngx_init_cycle 函数,其中进行了配置文件解析,调用了 ngx_conf_parse 函数 函数 ngx_conf_handler 根据配置项的 command 调用了对应的 set 回调函数 // static ngx_command_t ngx_http_commands // http 模块命令结构 {{{ static ngx_command…
1. epoll模块命令集 ngx_epoll_commands  epoll模块上下文 ngx_epoll_module_ctx  epoll模块配置 ngx_epoll_module static ngx_command_t ngx_epoll_commands[] = { /* 在调用epoll_wait时,将由第2和第3个参数告诉Linux内核一次最多可返回多少个事件. 这个配置项表示调用一次epoll_wait时最多可返回 的事件数,当然,它也会预分配那么多epoll_event结构体…
tcp 三次握手成功后,listen fd  可读,在process_event_timer 中调用rev->handler(rev)处理: 其回调函数为: ngx_event_accept /* 如何建立新连接 上文提刭过,处理新连接事件的回调函数是ngx_event_accept,其原型如下.void ngx_event_accept (ngx_event_t★ev) 下面简单介绍一下它的流程,如图9-6所示. 下面对流程中的7个步骤进行说明. 1)首先调用accept方法试图建立新连接,如…
Nginx服务器使用 master/worker 多进程模式. 主进程(Master process)启动后,会接收和处理外部信号: 主进程启动后通过fork() 函数产生一个或多个子进程(work process), 每个子进程会进行进程初始化. 模块调用以及对事件的接收和处理等工作. 主进程主要功能是和外界通信和对内部其他进程进行管理,具体来说有以下几点:   * 读取Nginx配置文件并验证其有效性和正确性   * 建立.绑定和关闭socket   * 按照配置生成.管理工作进程   *…
在 ngx_http_wait_request_handler 的最后调用了 ngx_http_process_request_line 函数用来处理和解析这次请求的全文 在读事件被触发时,内核套接字缓冲区的大小未必足够接收到全部的HTTP请求行:所以可能多次调用ngx_http_process_request_line方法去做完这项工作--------ngx_http_process_request_line方法也会作为读事件的回调方法,它可能会被epoll这个事件驱动机制多次调度,反复地接收…
1. nginx 连接结构 ngx_connection_t 这个连接表示是客户端主动发起的.Nginx服务器被动接受的TCP连接,我们可以简单称其为被动连接.同时,在有些请求的处理过程中,Nginx会试图主动向其他上游服务器建立连接,并以此连接与上游服务器通信,因此,这样的连接与ngx_connection_t又是不同的,Nginx定义了ngx_peer_connection_t结构体来表示主动连接,当然,ngx_peer_connection_t主动连接是以ngx_connection-t结…
                                                                       第二章 初始化Prism应用程序 本章将讨论为了使一个Prism应用程序的启动和运行哪些是必须的.Prism的应用程序在启动过程中需要注册和配置,这被称为引导应用程序. 什么是Bootstrapper? bootstrapper是一个类,通过Prism类库负责一个应用程序建立的初始化.通过使用bootstrapper,对于如何将Prism库组件连接到您的应…