
nginx学习
醇雾
这个作者很懒,什么都没留下…
展开
-
intptr_t 类型
最近在看nginx源码,看到有一个类型intptr_t,没有见过,google了一下,有人说是指针类型,但是看nginx源码中对该类型变量的使用,好像不是指针类型。[cpp] view plain copystatic ngx_int_t 667 ngx_get_options(int argc, char *const *argv) 668 { 669 u_char转载 2016-02-18 11:38:10 · 1389 阅读 · 0 评论 -
nginx源码初读(0)--学习nginx必看的网站
http://lxr.nginx.org/source就是这个网站,旁边有search功能,可以很方便的找到各种结构在哪里定义,在哪里引用使用过,从而更好的理解代码。配合vim+ctags,太方便啦原创 2016-02-19 14:44:36 · 1370 阅读 · 0 评论 -
nginx源码初读(11)--让烦恼从数据结构开始(ngx_command/ngx_module/ngx_conf)
第一点:ngx_command_t ngx_core_commands是nginx中的核心模块指令, 它的类型就是ngx_command_t。在每一个module的结构体中,也都有一个ngx_command_t。typedef struct ngx_command_s ngx_command_t;struct ngx_command_s { ngx_str_t原创 2016-03-10 15:24:31 · 1182 阅读 · 0 评论 -
nginx源码初读(10)--让烦恼从数据结构开始(ngx_cycle)
Nginx框架是围绕着ngx_cycle_t结构体来控制进程运行的。ngx_cycle_t结构体的prefix、conf_prefix、conf_file等字符串类型成员保存着Nginx配置文件的路径。Nginx在程序运行的时候会使用ngx_init_cycle方法来根据nginx.conf加载模块。ngx_cycle_t结构体定义:struct ngx_cycle_s { void原创 2016-03-04 15:47:35 · 498 阅读 · 0 评论 -
nginx源码初读(1)--让烦恼从数据结构开始(ngx_cdecl/ngx_int/ngx_log)
抛去所有的模块和各种定义的数据结构,对于一个没看过这么大工程的小白来说,太乱!乱的不要不要,光是各种数据结构的含义,就让我要抓狂了。好吧,我并不是说它结构不好,相反我感觉代码写的太棒了。。就是一时间。。接受不了。废话不说了,让烦恼开始吧,唉╮(╯▽╰)╭第一点 :ngx_cdeclint ngx_cdecl main(int argc, char *const *argv);是的,就是这个ngx_c原创 2016-02-18 15:12:44 · 2537 阅读 · 1 评论 -
nginx源码初读(2)--让烦恼从数据结构开始(ngx_buf/ngx_chain)
chain和buf是nginx过滤模块涉及到的结构体,而pool则是管理内存分配的一个结构。在日常的过滤模块中,这两类结构使用非常频繁,所以nginx采用类似freelist重复利用的原则,将使用完毕的chain或者buf结构体,放置到一个固定的空闲链表里,以待下次使用。比如,在通用内存池结构体中,pool->chain变量里面就保存着释放的chain。而一般的buf结构体,没有模块间公用的空闲链表原创 2016-02-19 19:00:44 · 1148 阅读 · 1 评论 -
nginx源码初读(3)--让烦恼从数据结构开始(ngx_pool)
nginx_pool提供了一种资源管理机制(如内存,文件等),使得对资源的使用和释放统一进行,免除了资源释放的很多问题,开发者只需在需要内存时进行申请即可,不用过多考虑内存的释放等问题,大大提高了开发的效率。例如,在特定的生命周期统一建立内存池(如main函数系统启动初期即分配1024B大小的内存池),需要内存时统一分配内存池中的内存,在适当的时候释放内存池的内存(如关闭http链接时调用ngx_d原创 2016-02-22 12:26:49 · 629 阅读 · 0 评论 -
nginx源码初读(4)--让烦恼从数据结构开始(ngx_str)
nginx作者定义的ngx_str_t中,字符串并不是以传统c的’\0’结尾的,使用了长度len配合data来表示一个数据段。所以我们要尽量使用nginx自带的api进行操作,如果没有自带,那就自己写一个api来进行相关操作,而不要随便使用c自带的字符串处理函数,那样很可能会导致内存越界,而且从原则上来说,这是违规行为。看看ngx_str_t被定义成了什么:typedef struct {原创 2016-02-22 16:59:58 · 2883 阅读 · 0 评论 -
nginx源码初读(5)--让烦恼从数据结构开始(ngx_array)
数组的结构体定义:typedef struct ngx_array_s ngx_array_t;struct ngx_array_s { void *elts; // 指向数组存储位置的首地址 ngx_uint_t nelts; // 当前数组中已经存放的元素个数 size_t size;原创 2016-02-23 16:41:42 · 785 阅读 · 1 评论 -
nginx源码初读(6)--让烦恼从数据结构开始(ngx_list)
nginx自定的list跟我们常见的list是不太一样的,不同点就在于它的节点,它的节点不像我们常见的list的节点,只能存放一个元素,ngx_list_t的节点实际上是一个固定大小的数组。在初始化的时候,我们需要设定元素需要占用的空间大小,每个节点数组的容量大小。在添加元素到这个list里面的时候,会在最尾部的节点里的数组上添加元素,如果这个节点的数组存满了,再增加新的节点。我们看一下数据结构定义原创 2016-02-23 17:43:28 · 452 阅读 · 0 评论 -
nginx源码初读(7)--让烦恼从数据结构开始(ngx_queue)
ngx_queue_t是nginx中的双向链表,我们看看它的数据结构,太简单:typedef struct ngx_queue_s ngx_queue_t;struct ngx_queue_s { ngx_queue_t *prev; ngx_queue_t *next;};是不是很简单?学过数据结构的我们一看就懂了。唉?等一下!等一下!等一下~~我老公呢~等一下。。(乱入,原创 2016-02-23 19:17:46 · 468 阅读 · 0 评论 -
nginx源码初读(8)--让烦恼从数据结构开始(ngx_event)
nginx中的事件模块是一个很重要的模块,但这里作为初读,我们只简单看一下ngx_event的数据结构,至于模块和机制,留作之后再分析。下面是结构体ngx_event_t的代码:typedef struct ngx_event_s ngx_event_t;struct ngx_event_s { void *data; /* 事件上下文数据,通常data原创 2016-02-24 15:11:34 · 1821 阅读 · 0 评论 -
nginx源码初读(9)--让烦恼从数据结构开始(ngx_listening/ngx_connection)
在nginx中connection就是对tcp连接的封装,其中包括连接的socket,读事件,写事件。利用nginx封装的connection,我们可以很方便的使用nginx来处理与连接相关的事情,比如,建立连接,发送与接受数据等。而nginx中的http请求的处理就是建立在connection之上的,所以nginx不仅可以作为一个web服务器,也可以作为邮件服务器。当然,利用nginx提供的con原创 2016-02-24 18:20:46 · 1930 阅读 · 0 评论 -
源代码查看工具:vim中ctags的使用(跳转查定义)
官方网站:http://ctags.sourceforge.net/ 下载后使用tar+configure+make+make install进行安装。$ tar -zxv -f ctags-5.8.tar.gz$ cd ctags-5.8$ ./configure$ make$ sudo make install使用前需要在源代码目录执行命令:$ ctags -R *参数的含义: -R原创 2016-02-18 14:44:09 · 3386 阅读 · 0 评论 -
nginx源码初读(12)--跟main一起看流程(Block 1: 初始化基础模块 Block 2:获取参数)
在这一节终于可以开始看流程看机制了,还是小激动的,毕竟只看数据结构还是不懂。因为数据结构+算法+代码才能完整的理解nginx啊。前面11节我们总结了所有可能用到的基本数据结构,至于每个结构相应的方法,出了str其他没有过多讲述,后面看流程的时候遇到都会进行研究。我就直接分阶段贴代码了,一段一段慢慢的看。有一些内容对理解没什么用就直接…了,见谅。Block 1: 获取参数 —->>函数启动:main原创 2016-03-11 14:48:30 · 756 阅读 · 0 评论