一、设计原则
(1)减少内存碎片
(2)减少向操作系统申请内存的次数
(3)降低各个模块的开发效率
二、源码结构
struct ngx_pool_s {
ngx_pool_data_t d;
size_t max;
ngx_pool_t *current;
ngx_chain_t ...
分类:
其他好文 时间:
2014-07-19 23:16:14
阅读次数:
258
一、事件处理框架概述事件处理框架所要解决的问题是如何收集、管理、分发事件。事件处理框架需要在不同的操作系统内核中选择一种事件驱动机制支持网络事件的处理。步骤:1.Nginx定义了一个核心模块ngx_events_module,该模块定义了事件类型的模块,为所有的事件模块解析events{}中的配置项...
分类:
其他好文 时间:
2014-07-19 00:37:04
阅读次数:
198
当Nginx检测到http关键配置项时,http配置模型启动,首先会建立一个ngx_http_cong_ctx_t结构。typedef struct{ void **main_conf; void **srv_conf; void **loc_conf;}ngx_http_conf_ctx_t...
分类:
其他好文 时间:
2014-07-16 20:58:15
阅读次数:
370
ngx_event_core_module模块的ngx_event_process_init方法对事件模块做了一些初始化。其中包括将“请求连接”这样一个读事件对应的处理方法(handler)设置为ngx_event_accept函数,并将此事件添加到epoll模块中。当有新连接事件发生时,ngx_event_accept就会被调用。大致流程是这样:
worker进程在ngx_worker...
分类:
其他好文 时间:
2014-07-15 12:25:28
阅读次数:
299
ngx_event_core_module模块属于事件模块,它是其它事件类模块的基础。它主要完成以下任务:
创建连接池决定使用哪些事件驱动机制初始化将要使用的事件模块
下面分析该模块的代码。
ngx_event_core_module的ngx_command_t数组定义如下:
/* ngx_event_core_module对7个配置项感兴趣 */
static ngx...
分类:
其他好文 时间:
2014-07-12 20:13:25
阅读次数:
330
核心模块ngx_events_module是一个专门用于管理事件模块的模块。它的实现很简单,下面是该模块的定义:
ngx_module_t ngx_events_module = {
NGX_MODULE_V1,
&ngx_events_module_ctx, /* module context */
ngx_events_comman...
分类:
其他好文 时间:
2014-07-11 08:08:06
阅读次数:
221
不同的操作系统对应不同的事件驱动机制,在Linux 2.6之后使用epoll机制,对应的事件驱动模块是ngx_epoll_module。Nginx的ngx_event_core_module模块根据操作系统确定使用哪一个事件驱动模块。事件驱动模块在ngx_module_t的ctx通用接口是ngx_event_module_t,定义如下所示:
typedef struct {
ngx_st...
分类:
其他好文 时间:
2014-07-09 12:01:13
阅读次数:
230
本流程从启动应用程序后的main函数开始跟踪。
解析命令行参数并保存到ngx_cycle_t结构体中,在ngx_process_options函数中将保存配置文件路径。
调用ngx_add_inherited_sockets函数获取环境变量中关于平滑升级的一些信息。平滑升级时,旧的master进程会通过环境变量发送传递一些信息给新的master进程,新的master进程启动后要...
分类:
其他好文 时间:
2014-07-08 15:33:20
阅读次数:
191
高度模块化的设计是Nginx的架构基础。所有模块都是以ngx_module_t结构体表示,该结构体内部定义了7个回调方法,它们负责模块的初始化和退出。commands成员是一个包含有ngx_command_t结构体的数组,ngx_command_t的作用就是解析配置项。ctx是一个void指针,这使得模块具有高度灵活性。
ctx可以指向不同类型模块的通用接口,官方Nginx共有5大类模块...
分类:
其他好文 时间:
2014-07-06 11:49:04
阅读次数:
246
整型的封装typedef intptr_t ngx_int _t;//有符号整型typedef uintptr_t ngx_uint_t;//无符号整型字符串的封装typedef struct{ size_t len; u_char *data; }ngx_str_t;链表容器...
分类:
其他好文 时间:
2014-07-05 20:55:25
阅读次数:
252