zoukankan      html  css  js  c++  java
  • nginx源码分析源码结构

    本文主要简单介绍nginx源码目录结构、程序编译流程、如何构建学习nginx的环境等。
    本文以及后续nginx源码分析文章是基于nginx当前(2009-02-27)的稳定版本0.6.35进行的分析,该版本的src目录下共有96615行代码,共记234个源码文件。
    注:本系统的文章为本人学习做笔记用,为源码分析,而非模块的编写,可能会存在问题。
    1.1 源码目录简述
    nginx的源码目录结构层次明确,从自动编译脚本到各级的源码,层次都很清晰,是一个大型服务端软件构建的一个范例。以下是源码目录结构说明:
    ├─auto 自动编译安装相关目录
    │ ├─cc 针对各种编译器进行相应的编译配置目录,包括Gcc、Ccc等
    │ ├─lib 程序依赖的各种库,包括md5,openssl,pcre等
    │ ├─os 针对不同操作系统所做的编译配置目录
    │ └─types
    ├─conf 相关配置文件等目录,包括nginx的配置文件、fcgi相关的配置等
    ├─contrib
    ├─html index.html
    └─src 源码目录
    ├─core 核心源码目录,包括定义常用数据结构、体系结构实现等
    ├─event 封装的事件系统源码目录
    ├─http http服务器实现目录
    ├─mail 邮件代码服务器实现目录
    ├─misc 该目录当前版本只包含google perftools包
    └─os nginx对各操作系统下的函数进行封装以及实现核心调用的目录。
    1.2 程序编译流程
    nginx有许多值得学习的地方,它的编译脚本也不例外。nginx的编译脚本非由autoconf等相关工具生成,都是由作者手工编写的。
    列举几个与后续开发相关的目录并做说明:
    src/auto/modules 根据configure和编译环境的条件生成相应的模块信息。见:ngx_modules.c
    src/auto/sources 定义了不同的模块的生成规则,包括相关的源文件、依赖等,最终编译过程中会生成相应的库文件。
    nginx在编译安装的过程中会生成objs目录,其中包括编译过程中生成的库文件,以及相关的配置文件,进入目录会存在以下文件:
    ngx_auto_config.h 生成的与程序运行相关的宏
    ngx_modules.c 由编译生成的模块相关的定义
    src 该目录下有许多生成的库文件,作为最终生成nginx使用
    1.3 构建nginx学习环境
    分析nginx源码的目的是学习nginx高效的处理能力的体系结构,并能将其思想,甚至于nginx的框架借用于服务端的开发。从可扩展的模块机制、内存管理、事件系统等各个方面都有许多值得学习的地方。
    但nginx的源代码的核心包间的关联度较高,其它核心的几个数据结构,包括ngx_connection\ngx_array\ngx_buf \ngx_command等等几乎存在于代码每一个角落,我在第一次看0.1.0的时候(0.1.0是网上能找到的nginx的最早版本),发现很难将它们独立出来去对这些数据结构进行测试和学习,于是总结出自己学习的一些方法如下:
    学习和熟悉核心数据结构的方法:
    1、先熟悉常用的数据结构的使用,包括以下:
    ngx_pool\ngx_connection\ngx_array\ngx_buf\
    ngx_command\ngx_log\ngx_event\ngx_cycle\ngx_str等
    对于这些数据结构的使用方法的原理基本熟悉,学习的方法就是看他们的实现以及http和mail中的使用,熟能生巧。
    2、删除nginx.c中main函数的主体,在1的基础上学习其它内容,这样就不需要过多关注nginx的复杂的编译脚本就能学习到相应的知识。
    附带基于nginx-0.1.0框架实现的简单echo服务端,程序读取用户输入内容,然后将该内容输出,定时断开连接。
    终端:

    -bash-3.2# !te
    telnet 127.0.0.1 80
    Trying 127.0.0.1…
    Connected to 127.0.0.1.
    Escape character is ‘^]’.
    ops init connection
    test
    test
    connection timedout
    Connection closed by foreign host.
    

    目录结构:
    ├─core
    ├─event
    │ └─modules
    ├─ops
    │ ├─ngx_ops.c
    │ └─ngx_ops.h
    └─os
    └─unix

     

  • 相关阅读:
    .Net 4.0 之并行运算(Parallel)(For、Foreach)
    【POJ】3494 Largest Submatrix of All 1’s
    【POJ】2676 Sudoku
    【POJ】3250 Bad Hair Day
    【SPOJ】11578 A Famous City
    【POJ】3740 Easy Finding
    【HUST】1017 Exact cover
    【POJ】3074 Sudoku
    【ZOJ】3209 Treasure Map
    【POJ】3076 Sudoku
  • 原文地址:https://www.cnblogs.com/catlee/p/4203461.html
Copyright © 2011-2022 走看看