nginx的rev->handler的更新历程

2024-06-22 18:36
文章标签 nginx 更新 handler 历程 rev

本文主要是介绍nginx的rev->handler的更新历程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

感觉nginx很强大,但是代码命令的确有提升的地方。整个nginx的数据处理都是靠rev驱动的,而且rev->handler也是在不停地变更来实现数据的处理的。

首先是在ngx_event_process_init()中

rev->handler = (c->type == SOCK_STREAM) ? ngx_event_accept | ngx_event_recvmsg;

然后在ngx_event_recvmsg()中调用ngx_stream_init_connection()

ls->handler(c);//ngx_stream_init_connection()

进而在ngx_stream_init_connection()中调用ngx_stream_init_connection()

rev->handler = ngx_stream_session_handler;
。。。。
rev->handler(rev);

最后在ngx_stream_session_handler()中调用了ngx_stream_core_run_phases(s)

  291 void                                                                               292 ngx_stream_session_handler(ngx_event_t *rev)                                       293 {                                                                                  294     ngx_connection_t      *c;                                                      295     ngx_stream_session_t  *s;                                                      296                                                                                    
✗ 297     c = rev->data;                                                                 
✗ 298     s = c->data;                                                                   299                                                                                    300     ngx_log_debug2(NGX_LOG_DEBUG_STREAM, s->connection->log, 0,                    301                    "{%s:%d}: before",__FUNCTION__,__LINE__);                       302     ngx_stream_core_run_phases(s);                                                                                                                                          303     ngx_log_debug2(NGX_LOG_DEBUG_STREAM, s->connection->log, 0,                    304                    "{%s:%d}: after",__FUNCTION__,__LINE__);                        305 }  

你以为到这里就结束了吗?并不是的。在NGX_STREAM_CONTENT_PHASE阶段有一次修改rev->handler的机会。

static void ngx_stream_udplog_handler(ngx_stream_session_t *s){
.....c->read->handler = ngx_stream_puma_block_reading;
.....
}

一直不太懂,这里为啥要赋值为一个read block的函数呢?

这篇关于nginx的rev->handler的更新历程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1085085

相关文章

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

linux安装、更新、卸载anaconda实践

《linux安装、更新、卸载anaconda实践》Anaconda是基于conda的科学计算环境,集成1400+包及依赖,安装需下载脚本、接受协议、设置路径、配置环境变量,更新与卸载通过conda命令... 目录随意找一个目录下载安装脚本检查许可证协议,ENTER就可以安装完毕之后激活anaconda安装更

通过配置nginx访问服务器静态资源的过程

《通过配置nginx访问服务器静态资源的过程》文章介绍了图片存储路径设置、Nginx服务器配置及通过http://192.168.206.170:8007/a.png访问图片的方法,涵盖图片管理与服务... 目录1.图片存储路径2.nginx配置3.访问图片方式总结1.图片存储路径2.nginx配置

Nginx禁用TLSv1.0 1.1改为TLSv1.2 1.3的操作方法

《Nginx禁用TLSv1.01.1改为TLSv1.21.3的操作方法》使用MozillaSSL配置工具生成配置,修改nginx.conf的ssl_protocols和ssl_ciphers,通... 目录方法一:方法二:使用 MoziChina编程lla 提供的 在线生成SSL配置工具,根据自己的环境填充对应的

nginx配置错误日志的实现步骤

《nginx配置错误日志的实现步骤》配置nginx代理过程中,如果出现错误,需要看日志,可以把nginx日志配置出来,以便快速定位日志问题,下面就来介绍一下nginx配置错误日志的实现步骤,感兴趣的可... 目录前言nginx配置错误日志总结前言在配置nginx代理过程中,如果出现错误,需要看日志,可以把