nginx源码

nginx源码,第1张

框架

模块化框架,共几个类型,图显示3个类型

模块间关系:

可以简单理解为分层,如图,数字代表从上到下层级

每个模块,包含ctx(逻辑)和command(配置项),每种类型模块的ctx类型固定

我们只要关注模块的ctx实现,以及配置项解析即可

因此,添加模块,可以在已有类型添加,也可以创建新的模块类型

1层,配置项关键字触发回调,里面对下属模块进行配置调用(比如遇到http配置项,1层调用command回调,里面会调用所有http模块的配置相关调用)

2层,主要负责对该类型其他模块的配置管理、使用等(比如事件模块类型,该层选择某个模块作为网络核心)

每个模块关心的配置项还和type有关(type标识配置项可出现的域)

看下event和http的配置,如何由conf_ctx管理

176 #define ngx_get_conf(conf_ctx, module)  conf_ctx[module.index]

494 #define ngx_event_get_conf(conf_ctx, module)                                  \
495              (*(ngx_get_conf(conf_ctx, ngx_events_module))) [module.ctx_index]
ngx_epoll_conf_t  *epcf = ngx_event_get_conf(cycle->conf_ctx, ngx_epoll_module);


 61 #define ngx_http_conf_get_module_main_conf(cf, module)                        \
 62     ((ngx_http_conf_ctx_t *) cf->ctx)->main_conf[module.ctx_index]
流程

启动流程:

网络+http流程:

 

项目看的比较详细,各个文件基本都做了整理,大约整理了七十多页

 总结:

1.数据结构封装的好

2.系统相关封装的好

3.框架设计的好,高可用、可扩展、高性能

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/790554.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存