Hello!
2012/10/16 张体亮:
> 先自我介绍一下,我是一名在校研究生,由于项目的需要,我们需要在nginx上做第三方模块的开发,前一段时间主要是研究nginx的使用和配置,现在进入读nginx源码阶段了,
第一个建议,尽量不要自己写 Nginx C 模块,因为达到生产级别质量的难度非常大。尽量基于 ngx_lua 模块来完成你所需要的各种业务功能:
http://wiki.nginx.org/HttpLuaModule
写 Lua 代码总是相对容易很多的,而且可以达到与 Nginx C 模块比较相近的性能要求。
> 做nginx第三方模块的开发,不知到nginx的底层运行是不行的,读nginx源码看了有二个星期了,进展越来越慢,从网上找了一些源码分析的博客,很多内容都是相互转载的,可学习的价值不是很大,我在你的视频中知道,你已经读完了nginx的全部十万行代码,现在想求老师分享一下,您读源码的方法?以及参考的资料?等等....我用C没做过大型的项目,只是用java做过web开发的项目,所以基础不是很好,根据老师您对nginx源码的了解,我应该看多久才能达到第三方模块开发的水平。
>
我最初读 Nginx 的源码就是对着 Kindle DX 手抄 Nginx 核心以及第三方 Nginx
模块中比较重要的部分的源码。白天手抄代码,晚上再在脑袋里回放白天抄写过的代码,反复推敲和消化,直至融会贯通。
当然,我最初看 Nginx 的源码是有强烈的目的性的,那就是基于 Nginx 改写我的 OpenResty
项目。并在消化代码的过程中,编写了 ngx_echo, ngx_headers_more, ngx_chunkin, ngx_memc
等很多实用的 Nginx 模块,从而更好地实践我对源码的理解。
这个过程看似艰辛,但是进展很快(一二月即已入门),而且还可以帮助我记忆很多代码。我至今仍然可以在脑袋里回放大篇的源码(不仅是 Nginx
的),甚至可以籍此捕捉代码中的 bug,而不用借助其他工具。
当然,现在 Nginx 相关的参考资料比我当年看的时候丰富多了,特别地,这里有一个不完整的资源列表:
http://wiki.nginx.org/Resources
不过,我的第一建议还是尽量避免自己开发 Nginx C 模块。尽量使用基于 ngx_lua 的 Lua 编程以及其他现成的高质量模块。
我同时抄送给 openresty 中文邮件列表:https://groups.google.com/group/openresty
(国内访问可能需要翻墙)也欢迎你加入这个列表,并在那里和我们探讨 Nginx 或者 OpenResty 相关的各种问题。
Best regards,
-agentzh