nginx源码分析-3

这一章内容讲述nginx中的事件是如何一步步添加到epoll实例中的。

  1. 在初始化http连接的函数ngx_http_init_connection中,nginx为http连接初始化了处理请求的回调函数,之后调用ngx_handle_read_event函数对可读数据进行处理。这里只为连接设置read而没有设置write是因为nginx使用的是异步非阻塞的事件驱动模型。由于是异步的,写事件的触发往往是由于之前的某个读事件处理过程中需要往客户端发送响应,因此写事件是由读事件触发的。
  1. ngx_handler_read_event:具体代码如下图所示。nginx可以根据配置选择不同的事件处理模型。ngx_add_event是一个函数指针,在启动时nginx会根据配置选择对应的事件模块,并将函数指针赋值给ngx_event_action中的相应成员。
  1. 以epoll为例,在ngx_epoll_init初始化时,会将ngx_epoll_module_ctx.actions赋值给ngx_event_actions。
  1. 以下是epoll处理模型对应的add_event函数,在该函数中会调用epoll_ctl来注册或修改文件描述符上的事件。epoll_ctl具有以下四个参数:
    • epfd:epoll的文件描述符
    • op:操作类型,可以是添加、修改、删除事件
    • fd:要操作的文件描述符
    • event:指定事件类型和其它相关信息
  1. 通过上述流程,nginx可以将请求连接的相关事件注册到epoll上进行监听,比如监听一个连接的读事件,则当连接上有数据可读时,就会触发epoll相关事件的handler,比如ngx_http_wait_request_handler。从而对请求进行处理。处理请求的流程在下一章节进行介绍。
相关推荐
Harvy_没救了7 小时前
【网络部署】 Win11 + VMware CentOS8 + Nginx 文件共享服务 Wiki
运维·网络·nginx
遇见火星12 小时前
Nginx限流配置:防止接口被刷,服务器稳如泰山
运维·服务器·nginx
Jinkxs1 天前
LoadBalancer- 主流负载均衡工具盘点:Nginx / Haproxy / Keepalived 基础介绍
运维·nginx·负载均衡
ReaF_star1 天前
【安全】SSL证书更新操作手册(Nginx+Cloudflare+acme.sh)
nginx·安全·ssl
云动课堂1 天前
【运维实战】Nginx 高性能Web服务 · 一键自动化部署方案 (适配银河麒麟 V10 / openEuler / CentOS 7/8)
运维·前端·nginx
2601_949817922 天前
nginx 代理 redis
运维·redis·nginx
java1234_小锋2 天前
解释一下NGINX的反向代理和正向代理的区别?
运维·nginx
techdashen2 天前
Cloudflare 为何抛弃 NGINX,用 Rust 自研了一个代理
运维·nginx·rust
人生匆匆2 天前
通过nginx解决跨域问题
运维·nginx
子木HAPPY阳VIP3 天前
信创UOS,Docker 完整操作部署(Dockerfile部署方式)&排错整合
linux·运维·redis·nginx·docker·容器·tomcat