您的位置:首页 > 运维架构 > Nginx

nginx源码分析(5)-方法(2)

2009-10-11 11:01 281 查看
利用nginx wiki和互联网收集了不少nginx相关的文档资料,但是仔细阅读之后发觉对理解nginx架构有直接帮助的资料不多,一些有帮助的资料也要结合阅读部分源码细节才能搞清楚所述其是,可能nginx在非俄国之外的环境下流行不久,应用还很简单,相关的英文和中文文档也就不够丰富的原因吧。

不过还是有一些金子的。

如果要了解nginx的概况和使用方法,wiki足以满足需要,wiki上有各个模块的概要和详细指令说明,也有丰富的配置文件示例,不过对于了解nginx系统架构和开发没有相关的文档资料。

nginx的开发主要是指撰写自定义模块代码。这需要了解nginx的模块化设计思想,模块化也是nginx的一个重要思想,如果要整体上了解nginx,从模块化入手是一个不错的起点。emiller的nginx模块开发指引是目前最好的相关资料了(http://emiller.info/nginx-modules-guide.html),这份文档作为nginx的入门文档也是合适的,不过其中有些内容很晦涩,很难理解,要结合阅读源码,反复比对才能真正理解其内涵。

如果要从整体上了解nginx架构和源码结构,Joshua zhu的广州技术沙龙讲座的pdf和那张大图是不错的材料,这份pdf可以在wiki的资源页面中找到地址链接。Joshua也给了我一些建议和指引,使我少走了不少弯路,很快进入状态,感谢。

相信最好的文档就是源码本身了。随着阅读源码的量越来越大,也越来越深入,使我认识到最宝贵的文档就在源码本身,之前提到过,nginx的代码质量很高,命名比较讲究,虽然很少注释,但是很有条理的结构体命名和变量命名使得阅读源码就像是阅读文档。不过要想顺利的保持这种感觉也不是一件简单的事情,觉得要做好如下几点:

1)熟悉C语言,尤其是对函数指针和宏定义要有足够深入的理解,nginx是模块化的,它的模块化不同于apache,它不是动态加载模块,而是把需要的模块都编译到系统中,这些模块可以充分利用系统核心提供的诸多高效的组件,把数据拷贝降到最低的水平,所以这些模块的实现利用了大量的函数指针实现回掉操作,几乎是无函数指针不nginx的地步。

2)重点关注nginx的命名,包括函数命名,结构体命名和变量命名,这些命名把nginx看似耦合紧密的实现代码清晰的分开为不同层次不同部分的组件和模块,这等效于注释。尤其要关注变量的命名,后面关于模块的分析中会再次重申这一点。

3)写一个自定义的模块,利用nginx强大的内部组件,这是深入理解nginx的一个有效手段。

接下来的分析过程,着眼于两个重点,一个就是上面提到的模块化思想的剖析,力争结合自身理解把这个部分分析透彻;另一个重点是nginx的事件处理流程,这是高性能的核心,是nginx的core。

go on
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息