nginx源码分析

nginx源码分析

ID:37658550

大小:734.91 KB

页数:67页

时间:2019-05-27

nginx源码分析_第1页
nginx源码分析_第2页
nginx源码分析_第3页
nginx源码分析_第4页
nginx源码分析_第5页
资源描述:

《nginx源码分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、nginx源码分析nginx源码分析(1)-缘起nginx是一个开源的高性能web服务器系统,事件驱动的请求处理方式和极其苛刻的资源使用方式,使得nginx成为名副其实的高性能服务器。nginx的源码质量也相当高,作者家酿了许多代码,自造了不少轮子,诸如内存池、“”缓冲区、字符串、链表、红黑树等经典数据结构,事件驱动模型,http解析,各种子处理模块,甚至是自动编译脚本都是作者根据自己的理解写出来的,也正因为这样,才使得nginx比其他的web服务器更加高效。nginx的代码相当精巧和紧凑,虽然全部代码仅有10

2、万行,但功能毫不逊色于几十万行的apache。不过各个部分之间耦合的比较厉害,很难把其中某个部分的实现拆出来使用。对于这样一个中大型的复杂系统源码进行分析,是有一定的难度的,刚开始也很难找到下手的入口,所以做这样的事情就必须首先明确目标和计划。最初决定做这件事情是为了给自己一些挑战,让生活更有意思。但看了几天之后,觉得这件事情不该这么简单看待,这里面有太多吸引人的东西了,值得有计划的系统学习和分析。首先这个系统中几乎涵盖了实现高性能服务器的各种必杀技,epoll、kqueue、master-workers、po

3、ol、buffer……,也涵盖了很多web服务开发方面的技术,ssi、ssl、proxy、gzip、regex、loadbalancing、reconfiguration、hotcodeswapping……,还有一些常用的精巧的数据结构实现,所有的东西很主流;其次是一流的代码组织结构和干净简洁的代码风格,尤其是整个系统的命名恰到好处,可读性相当高,很kiss,这种风格值得学习和模仿;第三是通过阅读源码可以感受到作者严谨的作风和卓越的能力,可以给自己增加动力,树立榜样的力量。另一方面,要达到这些目标难度很高,必须

4、要制定详细的计划和采取一定有效的方法。对于这么大的一个系统,想一口气知晓全部的细节是不可能的,并且nginx各个部分的实现之间关系紧密,不可能做到窥一斑而知全身,合适的做法似乎应该是从main开始,先了解nginx的启动过程的顺序,然后进行问题分解,再逐个重点分析每一个重要的部分。对每个理解的关键部分进行详细的记录和整理也是很重要的,这也是这个源码分析日志系列所要完成的任务。为了更深刻的理解代码实现的关键,修改代码和写一些测试用例是不可避免的,这就需要搭建一个方便调试的环境,这也比较容易,因为使用的linux系

5、统本身就是一个天然的开发调试环境。个人的能力是有限的,幸运的是互联网上还有一帮同好也在孜孜不倦的做着同样的事情,与他们的交流会帮助少走一些弯路,也会互相促进,更深入和准确的理解源码的本实。开始一次愉快的旅行,go!nginx源码分析(2)-概览源码分析是一个逐步取精的过程,最开始是一个大概了解的过程,各种认识不会太深刻,但是把这些真实的感受也记录下来,觉得挺有意思的,可能有些认识是片面或者是不正确的,但可以通过后面更深入细致的分析过程,不断的纠正错误和深化理解。源码分析是一个过程,经验是逐步累积起来的,希望文字

6、可以把这种累积的感觉也准确记录下来。现在就看看对nginx源码的第一印象吧。源码包解压之后,根目录下有几个子目录和几个文件,最重要的子目录是auto和src,最重要的文件是configure脚本,不同于绝大多数的开源代码,nginx的configure脚本是作者手工编写的,没有使用autoconf之类的工具去自动生成,configure脚本会引用auto目录下面的脚本文件来干活。根据不同的用途,auto目录下面的脚本各司其职,有检查编译器版本的,有检查操作系统版本的,有检查标准库版本的,有检查模块依赖情况的,有

7、关于安装的,有关于初始化的,有关于多线程检查的等等。configure作为一个总驱动,调用这些脚本去生成版本信息头文件、默认被包含的模块的声明代码和Makefile文件,版本信息头文件(ngx_auto_config.h,ngx_auto_headers.h)和默认被包含的模块的声明代码(ngx_modules.c)被放置在新创建的objs目录下。要注意的是,这几个生成的文件和src下面的源代码一样重要,对于理解源码是不可忽略的重要部分。src是源码存放的目录,configure创建的objs/src目录是用来

8、存放生成的.o文件的,注意区分一下。src按照功能特性划分为几个部分,对应着是几个不同的子目录。src/core存放着主干部分、基础数据结构和基础设施的源码,main函数在src/core/nginx.c中,这是分析源码的一个很好的起点。src/event存放着事件驱动模型和相关模块的源码。src/http存放着httpserver和相关模块的源码。src/mail存放着邮件代理和相关

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。