模块化框架,共几个类型,图显示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.框架设计的好,高可用、可扩展、高性能
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)