`

nginx源码阅读

 
阅读更多

# 架构

## 架构:

    代码结构

    事件机制

        event框架和非阻塞模型: http://code.google.com/p/wcr/wiki/Nginx

            nginx的worker进程的主要工作在ngx_worker_process_cycle函数中实现,worker线程调用ngx_process_events_and_timers函数,捕获事件,分发事件。

            其中:

            1、(开启accept_mutex的情况)调用ngx_enable_accept_events()侦听accept事件。整个操作是异步的,尝试加锁,加上就侦听,加不上就返回

            2、调用(void) ngx_process_events(cycle, timer, flags);。ngx_process_events是经过定义的宏:#define ngx_process_events   ngx_event_actions.process_events

            ngx_event_actions是全局注册的事件处理模块ngx_event_actions_t,例如event/modules下的ngx_epoll_module_ctx。

        accpet:1、在开启accept_mutex的情况下,worker process在第一次调用ngx_process_events_timers()时,会调用ngx_enable_accept_events()侦听accept事件。

            2、在未开启accept_mutex的情况下,worker process会在event模块初始化的函数中,绑定accept事件的处理函数,由于worker进程共享由master创建的listenning socket,那么,每个worker进程能同时侦听这些套接字,捕获到accept事件,接收新的连接。

        定时器:http://blog.csdn.net/marcky/article/details/7623335

            概述:nginx提供一套高效的定时器实现,除了nginx核心能够使用定时器以外,我们在进行模块开发的时候也可以使用定时器来完成一些定时执行的任务。nginx定时器实现的核心是使用一棵红黑树来存储各个定时事件,每次循环的时候就从这棵树里找出超时的事件,然后一一触发,完成定时任务操作。

            定时器初始化:ngx_event_process_init() -> ngx_event_timer_init()

              配置指令timer_resolution -> ngx_timer_resolution,分两种情况

                1、配置:不会执行这段初始化代码了。也就是说,配置文件中使用了timer_resolution指令后,epoll_wait将使用信号中断的机制来驱动定时器,。初始化里做的setitimer操作就将会发挥它的作用了——定时产生SIGALRM信号将epoll_wait的阻塞给中断掉,从而唤醒

                2、未配置:将使用定时器红黑树的最小时间作为epoll_wait超时时间来驱动定时器

            定时事件的执行:ngx_process_events_and_timers()调用ngx_event_expire_timers(),检查哪些事件超时

        信号,惊群

    进程机制:master,worker,进程间通信

  基础设施:

    * 内存:内存池:http://www.alidata.org/archives/1390

    buffer和chain

    * aio:入门:http://2015.iteye.com/blog/1069444   NGX_HAVE_FILE_AIO,eventfd(),

      NGINX如何配置:http://lenky.info/2013/01/12/nginx%E5%AF%B9linux-native-aio%E6%9C%BA%E5%88%B6%E7%9A%84%E5%BA%94%E7%94%A8%EF%BC%88%E9%85%8D%E7%BD%AE%E7%AF%87%EF%BC%89/

      NGINX如何实现:http://lenky.info/2013/01/12/nginx%E5%AF%B9linux-native-aio%E6%9C%BA%E5%88%B6%E7%9A%84%E5%BA%94%E7%94%A8%EF%BC%88%E5%AE%9E%E7%8E%B0%E7%AF%87%EF%BC%89/

    * 锁:http://simohayha.iteye.com/blog/658012

    基本结构

      数据结构:

        array: ngx_array.{h,c}  内存不够时分配原有的两倍

        list:内存不够再分配一个list_part

        queue:TODO

        radix_tree、rbtree:

      算法:

        crypt:被ngx_http_auth_basic_crypt_handler调用

        hash和murmurhash、md5

        crc16和32:

      和nginx相关的设施:

        内存相关:

        pool:池结构,一般是内存池,也可以用于其他

        buffer和chain:6 TODO

        slab

        其他结构:

        connection:http://blog.csdn.net/lengzijian/article/details/7593861 TCP defer accept选项

        config_file:2 TODO tengine讲的比较详细

        cpuinfo:ngx_cacheline_size CPU的一级缓存大小

        cycle:3 TODO

        inet

        resolver:

        file:ngx_file.{h,c}

        log:4 TODO

        open_file_cache:TODO

        output_chain:TODO ????

        parse:5 TODO ???

        regex:对PCRE的封装

        shmtx和spinlock

        times:

    时间缓存

    文件缓存

    * log:格式说明和使用:http://linux008.blog.51cto.com/2837805/595749

        实现:

  * 启动阶段:http://tengine.taobao.org/book/chapter_11.html

  * 请求处理阶段:http://tengine.taobao.org/book/chapter_12.html

 

# 模块开发

分享到:
评论

相关推荐

    nginx源码剖析

    nginx源码说明;其他下载即可,没下载分了,大家互相帮忙。其他情况大概就这些吧,其他也没什么好说的了,看文档即可

    nginx 源代码 注释版

    通过阅读这个注释版的源代码,我们可以了解到Nginx是如何处理网络事件、解析配置、管理连接、处理HTTP请求以及实现各种高级功能的。对于想要定制Nginx、开发新模块或优化性能的开发者来说,这是一个不可多得的学习...

    nginx 源码 解析 资料大全

    收集的 nginx 源码 解析 ,非常全 architecture.png Emiller的Nginx模块开发指南.docx ...Nginx源代码分析.docx Nginx源代码分析与导读.ppt nginx源码分析.doc nginx源码剖析.pdf Ningx代码研究.docx

    Nginx源代码分析

    Nginx源代码分析是学习使用Nginx源码开发人员的指导丛书,为开发者提供了详细的Nginx源代码分析指导。下面是对Nginx源代码的分析指导。 目录结构 Nginx的源码目录结构层次明确,从自动编译脚本到各级的源码,层次...

    nginx源码 1.18版

    8. **模块化设计**:Nginx的模块化设计允许开发者方便地扩展其功能,只需编写特定模块的源代码,然后将其编译进Nginx即可。 分析Nginx源码,我们可以学习到以下知识点: 1. **C语言编程**:Nginx主要用C语言编写,...

    Nginx源代码分析.pdf

    在深入解析Nginx源代码之前,我们先了解一下其目录结构和基本数据结构。 1. Nginx源代码目录结构: Nginx的源码目录设计得层次分明,方便编译和维护。`auto`目录包含了编译安装的相关脚本,根据不同编译器和操作...

    nginx源码学习资料

    同时,通过阅读和分析Nginx源码,可以更直观地看到这些概念如何在实际代码中实现。 总之,掌握Nginx源码不仅可以提升Web服务的运维技能,还能为开发者提供一个深入了解网络编程、并发处理和系统级优化的窗口。通过...

    nginx各版本源码包

    **Nginx 各版本源码包详解** Nginx 是一款高性能的 Web 和反向代理服务器,广泛应用于互联网行业中,以其高效的并发处理能力、低内存占用和丰富的模块支持而备受青睐。本压缩包提供了 Nginx 的四个不同版本源码,...

    nginx源码windows版

    **Nginx源码在Windows下的编译与运行** Nginx是一款高性能的Web服务器及反向代理服务器,因其高效、稳定以及丰富的模块支持而广受欢迎。在Windows环境下,尽管Nginx通常被认为更适合在Linux系统中运行,但通过...

    nginx源代码

    在“nginx-1.5.10”这个压缩包中,我们可以找到Nginx 1.5.10版本的源代码。这个版本可能包含了当时的最新特性和改进,对于学习Nginx的内部机制非常有价值。 1. **模块化设计**:Nginx的核心由多个模块组成,包括...

    带有注释的nginx源码

    在压缩包中的`nginx-1.0.14_comment-master`目录下,你可以找到源代码文件,例如`src/core/nginx.h`是核心头文件,`src/event`包含事件处理的相关代码,`src/http`则是HTTP模块的实现,而`src/os/unix`针对Unix-like...

    nginx源码包安装后设置开机自启.docx

    nginx源码包安装后设置开机自启 在 Linux 系统中,源码安装的软件默认无法使用 systemd 管理,而 systemd 是 Linux 系统中最常用的进程管理工具之一。因此,如果需要使用 systemd 管理源码安装的软件,需要手动编写...

    Nginx源码安装手册

    下面将详细介绍Nginx源码安装手册中所涵盖的知识点。 首先,系统环境的配置是安装任何软件前需要确认的基础。本手册中提到的Nginx版本是1.6.3,操作系统为CentOS 6.7 64位。这说明了要安装的Nginx版本和操作系统...

    nginx的源码

    **Nginx源码分析与理解** Nginx是一款高性能的HTTP和反向代理服务器,以其轻量级、高并发处理能力以及优秀的稳定性在互联网行业中广泛使用。它的源代码主要用C语言编写,深入理解Nginx的源码有助于我们更好地优化...

    可自动按天分割日志的nginx (根据nginx源代码修改得来)

    包含源码和编译好的文件夹。 编译好的可以直接拷贝使用,配置log格式的时候在文件名中加上 $date_udf 变量即可(如:access_log logs/$date_udf.access.log main; 将在 logs目录下生成类似 2014-01-21.access.log 的...

Global site tag (gtag.js) - Google Analytics