Nginx源码学习:没有虚函数也能玩责任链,Nginx用3个全局函数指针搭出的过滤流水线
一、C语言里的多态C语言没有虚函数,没有接口继承,没有override关键字。但Nginx硬是用3个全局函数指针和一套精巧的init注册机制,在纯C环境下搭出了一条完整的责任链——HTTP响应从生成到发送,要经过一条header过滤链和一条body过滤链,每条链上挂着十几个过滤器模块,每个模块只管自己那一段逻辑,处理完就把数据递给下一个。和GoF设计模式书里描述的责任链一模一样,只不过实现语言是1972年诞生的C。这篇文章要拆解的就是这两条过滤链最底层的4个模块——它们是整条链的"地基",所有其他过滤器(gzip、chunked、range、charset……)最终都要把数据交给它们来完成最后一步。这4个模块分别是:模块职责ngx_http_header_filter_module过滤链的末端之一,把r-headers_out结构体序列化成HTTP/1.1 200 OK\r\nServer: nginx\r\n...这样的字节流ngx_http_copy_filter_modulebody过滤链上的一个中间站,负责把可能来自文件、内存、管道的各种缓冲区统一复制成可发送的形态,支持AIO和线程池异步

相关新闻

【TRO 26-cv-599】695名卖家涉案!火影忍者NARUTO商标+版权维权案,组团和解中!

【TRO 26-cv-599】695名卖家涉案!火影忍者NARUTO商标+版权维权案,组团和解中!

导语:动漫周边、cosplay服饰、文创礼品类目卖家紧急预警!日本顶级动漫制作公司TV Tokyo Corporation发起重磅维权案【26-cv-599】,已在美国佐治亚州北区联邦法院正式立案,手握《火影忍者》(NARUTO)系列核心…

2026/7/3 16:45:18 阅读更多 →
[开发工具] 为什么“改了寄存器,硬件就变了”?——用一段典型代码把 MCU 的软硬件交互从头讲透

[开发工具] 为什么“改了寄存器,硬件就变了”?——用一段典型代码把 MCU 的软硬件交互从头讲透

前言一般在厂商手册里你会看到这样一句话:写寄存器就能把某个引脚从 GPIO 切换到 UART、SPI 或定时器的输出(即更改 AF)。这并不是魔法,也不是文档里的抽象描述——它背后有一条清晰、可追溯的软硬件链路:CPU 发起一次…

2026/7/4 3:55:58 阅读更多 →
解决电路设计软件使用难点,protel电路设计软件之protel转allegro

解决电路设计软件使用难点,protel电路设计软件之protel转allegro

电路设计软件的使用频率极高,采用电路设计软件,可提升工作者设计电路的效率。但在电路设计软件使用过程中,同样存在一些问题,如格式转换等。为帮助大家解决电路设计软件难点,本文将对protel电路设计软件中protel转alle…

2026/6/19 0:42:44 阅读更多 →

最新新闻

基于ARM Cortex-M4的LED矩阵显示系统设计与优化

基于ARM Cortex-M4的LED矩阵显示系统设计与优化

1. 项目概述:基于MK51DN512CLQ10的LED矩阵信息显示系统 在嵌入式显示领域,16x12像素的LED矩阵提供了一种经济高效的视觉信息传递方案。本项目采用NXP的MK51DN512CLQ10微控制器(基于ARM Cortex-M4内核)驱动IS31FL3733芯片控制的192…

2026/7/4 12:53:11 阅读更多 →
Claude Code Skill功能详解:从重复指令到可复用AI开发技能

Claude Code Skill功能详解:从重复指令到可复用AI开发技能

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Claude 随心用,限时 5 折。 👉 点击领海量免费额度 在实际的 AI 辅助开发工作流中,我们经常需要向 Claude 重复解释项目特定的编码规范、部署流程或复杂的多步骤任务。每次…

2026/7/4 12:51:10 阅读更多 →
AI可解释性工程实战:三层架构与四大硬编码模块

AI可解释性工程实战:三层架构与四大硬编码模块

1. 这不是“解释性”科普,而是一场AI控制权的实操复盘“Understanding Interpretability”这个标题乍看像学术讲座预告,但过去三年我带团队落地的7个工业级AI项目里,它实际意味着:产线质检模型突然把合格品标成缺陷时,…

2026/7/4 12:47:09 阅读更多 →
本科生论文写作利器:AI工具全流程指南

本科生论文写作利器:AI工具全流程指南

1. 本科生论文写作痛点与AI工具价值 写毕业论文是每个本科生都要经历的"成人礼",但现实中90%的学生都会遇到这些典型问题:文献综述找不到方向、数据分析耗时费力、格式调整反复折腾、查重降重痛苦不堪。作为带过上百篇本科论文的指导老师&…

2026/7/4 12:43:07 阅读更多 →
如何3步完成iOS激活锁绕过:面向A9-A11设备的完整指南

如何3步完成iOS激活锁绕过:面向A9-A11设备的完整指南

如何3步完成iOS激活锁绕过:面向A9-A11设备的完整指南 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 你是否曾遇到过这样的情况:购买二手iPhone后却卡在激活锁界面无法使用&…

2026/7/4 12:39:05 阅读更多 →
Android ML Kit人脸比对技术实现与优化

Android ML Kit人脸比对技术实现与优化

1. Android ML Kit 人脸比对技术解析在移动应用开发中,人脸识别技术已经成为身份验证、社交互动等场景的核心功能。Google提供的ML Kit人脸识别API为开发者提供了便捷高效的解决方案。不同于传统的人脸比对方式(如直接比较像素值)&#xff0c…

2026/7/4 12:39:05 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻