广西专业做网站的公司,wordpress未登录用户重定向,建设一个网站需要注意的事项,电商自学网免费这一章内容讲述nginx中的事件是如何一步步添加到epoll实例中的。
在初始化http连接的函数ngx_http_init_connection中#xff0c;nginx为http连接初始化了处理请求的回调函数#xff0c;之后调用ngx_handle_read_event函数对可读数据进行处理。这里只为连接设置read而没有设…这一章内容讲述nginx中的事件是如何一步步添加到epoll实例中的。
在初始化http连接的函数ngx_http_init_connection中nginx为http连接初始化了处理请求的回调函数之后调用ngx_handle_read_event函数对可读数据进行处理。这里只为连接设置read而没有设置write是因为nginx使用的是异步非阻塞的事件驱动模型。由于是异步的写事件的触发往往是由于之前的某个读事件处理过程中需要往客户端发送响应因此写事件是由读事件触发的。 ngx_handler_read_event具体代码如下图所示。nginx可以根据配置选择不同的事件处理模型。ngx_add_event是一个函数指针在启动时nginx会根据配置选择对应的事件模块并将函数指针赋值给ngx_event_action中的相应成员。 以epoll为例在ngx_epoll_init初始化时会将ngx_epoll_module_ctx.actions赋值给ngx_event_actions。 以下是epoll处理模型对应的add_event函数在该函数中会调用epoll_ctl来注册或修改文件描述符上的事件。epoll_ctl具有以下四个参数 epfdepoll的文件描述符op操作类型可以是添加、修改、删除事件fd要操作的文件描述符event指定事件类型和其它相关信息 通过上述流程nginx可以将请求连接的相关事件注册到epoll上进行监听比如监听一个连接的读事件则当连接上有数据可读时就会触发epoll相关事件的handler比如ngx_http_wait_request_handler。从而对请求进行处理。处理请求的流程在下一章节进行介绍。