Nginx源码分析 - Nginx启动以及IOCP模型

Nginx源码分析 - Nginx启动以及IOCP模型

ID:39466569

大小:317.00 KB

页数:36页

时间:2019-07-04

Nginx源码分析 - Nginx启动以及IOCP模型_第1页
Nginx源码分析 - Nginx启动以及IOCP模型_第2页
Nginx源码分析 - Nginx启动以及IOCP模型_第3页
Nginx源码分析 - Nginx启动以及IOCP模型_第4页
Nginx源码分析 - Nginx启动以及IOCP模型_第5页
资源描述:

《Nginx源码分析 - Nginx启动以及IOCP模型》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Nginx源码分析-Nginx启动以及IOCP模型本文档针对Nginx1.11.7版本,分析Windows下的相关代码,虽然服务器可能用Linux更多,但是windows平台下的代码也基本相似,另外windows的IOCP完成端口,异步IO模型非常优秀,很值得一看。Nginx启动曾经有朋友问我,面对一个大项目的源代码,应该从何读起呢?我给他举了一个例子,我们学校大一大二是在紫金港校区,到了大三搬到玉泉校区,但是大一的时候也会有时候有事情要去玉泉办。偶尔会去玉泉,但是玉泉校区不熟悉,于是跟着百度地图或者跟着学

2、长走。因为是办事情,所以一般也就是局部走走,比如在学院办公楼里面走走。等到大三刚来到玉泉,会发现,即使是自己以前来过几次,也觉得这个校区完全陌生,甚至以前来过的地方,也显得格外生疏。但是当我们真正在玉泉校区开始学习生活了,每天从寝室走到教室大多就是一条路,教超就是另一条路,这两条主要的路走几遍之后,有时候顺路去旁边的小路看看,于是慢慢也熟悉了这个新的校区。源代码的阅读又何尝不是这样呢,如果没有一条主要的路线,总是局部看看,浅尝辄止不说,还不容易把握整体的结构。各模块之间的依赖也容易理不清。如果有一条比较主干

3、的线路,去读源代码,整体结构和思路也会变得明晰起来。当然我也是持这种看法:博客、文章的作者,写文章的思路作者自己是清楚的,读者却不一定能看得到;而且大家写东西都难免会有疏漏。看别人写的源码分析指引等等,用一种比较极端的话来说,是一种自我满足,觉得自己很快学到了很多源码级别的知识,但是其实想想,学习乎,更重要的是学习能力的锻炼,通过源码的学习,学习过程中自己结合自己情况的思考,甚至结合社会哲学的思考,以及读源码之后带来的收益,自己在平时使用框架、库的时候,出了问题的解决思路,翻阅别人源码来找到bug的能力。如

4、果只是单单看别人写的源码分析,与写代码的时候只去抄抄现成的代码,某种程度上是有一定相似性的。我自己是使用Go为主的,之前对于一流的nginx中间件也没有太多了解,也是第一次去看,水平不足之处,还望海涵。回归正题,Nginx的源代码分析,也是要找一条主要的路线,对于很多程序来说,启动过程就是一条很不错的路线,找找nginx的入口函数main,发现在/src/core/nginx.c中,代码大概如下:intngx_cdeclmain(intargc,char*const*argv){...//先是一些变量声明n

5、gx_debug_init();...ngx_pid=ngx_getpid();...init_cycle.pool=ngx_create_pool(1024,log);...cycle=ngx_init_cycle(&init_cycle);...if(ngx_signal){returnngx_signal_process(cycle,ngx_signal);}...if(ngx_create_pidfile(&ccf->pid,cycle->log)!=NGX_OK){return1;}...if(n

6、gx_process==NGX_PROCESS_SINGLE){ngx_single_process_cycle(cycle);}else{ngx_master_process_cycle(cycle);}return0}这段代码大致看上去,先是做了一些初始化的事情,包括pool看起来应该是内存池之类的变量的分配,获取系统信息,初始化日志系统等等,因为还没有进入相应函数去仔细看,所以先放着。用过nginx的同学应该了解,nginx命令行运行./nginx后,他直接就运行服务了,很静默,然后即使用Ctrl+C

7、也关不掉。但是再开一个console,运行./nginx-h就会看到:nginxversion:nginx/1.11.7Usage:nginx[-?hvVtTq][-ssignal][-cfilename][-pprefix][-gdirectives]Options:-?,-h:thishelp-v:showversionandexit-V:showversionandconfigureoptionsthenexit-t:testconfigurationandexit-T:testconfigurati

8、on,dumpitandexit-q:suppressnon-errormessagesduringconfigurationtesting-ssignal:sendsignaltoamasterprocess:stop,quit,reopen,reload-pprefix:setprefixpath(default:NONE)-cfilename:setconfigurationfile(default:con

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

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

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