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 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

Nginx 重写与重定向配置方法

《Nginx重写与重定向配置方法》Nginx重写与重定向区别:重写修改路径(客户端无感知),重定向跳转新URL(客户端感知),try_files检查文件/目录存在性,return301直接返回永久重... 目录一.try_files指令二.return指令三.rewrite指令区分重写与重定向重写: 请求

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Windows 系统下 Nginx 的配置步骤详解

《Windows系统下Nginx的配置步骤详解》Nginx是一款功能强大的软件,在互联网领域有广泛应用,简单来说,它就像一个聪明的交通指挥员,能让网站运行得更高效、更稳定,:本文主要介绍W... 目录一、为什么要用 Nginx二、Windows 系统下 Nginx 的配置步骤1. 下载 Nginx2. 解压