E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
Nginx源码分析
nginx源码分析
(2)- 概览
源码分析是一个逐步取精的过程,最开始是一个大概了解的过程,各种认识不会太深刻,但是把这些真实的感受也记录下来,觉得挺有意思的,可能有些认识是片面或者是不正确的,但可以通过后面更深入细致的分析过程,不断的纠正错误和深化理解。源码分析是一个过程,经验是逐步累积起来的,希望文字可以把这种累积的感觉也准确记录下来。现在就看看对nginx源码的第一印象吧。源码包解压之后,根目录下有几个子目录和几个文件,最重
bingqingsuimeng
·
2013-05-17 14:00
nginx源码分析
—队列结构ngx_queue_t
队列实现文件:文件:./src/core/ngx_queue.h/.cngx_queue_t容器的优势在于:实现了排序功能它非常轻量级,是一个纯粹的双向链表,它不负责链表元素所占内存的分配,与Nginx封装的ngx_pool_t内存池完全无关支持两个链表间的合并1.基本数据结构typedefstructngx_queue_sngx_queue_t; structngx_queue_s{ ngx_
chanlp129
·
2013-04-25 00:00
nginx源码分析
—链表结构ngx_list_t
链表实现文件:文件:./src/core/ngx_list.h/.c1.基本数据结构typedefstructngx_list_part_sngx_list_part_t; structngx_list_part_s{ void*elts; ngx_uint_tnelts; ngx_list_part_t*next; }; typedefstruct{ ngx_list_part_t*last
chanlp129
·
2013-04-24 00:00
nginx源码分析
—数组结构ngx_array_t
数组实现文件:文件:./src/core/ngx_array.h/.c1.数组结构structngx_array_s{ void*elts;//数组数据区起始位置 ngx_uint_tnelts;//实际存放的元素个数 size_tsize;//每个元素的大小 ngx_uint_tnalloc;//数组分配的空间个数,即实际饭分配的小空间个数 ngx_pool_t*pool;//该数组在内存中的分
chanlp129
·
2013-04-23 23:00
Nginx源码分析
-内存池
转自:http://www.alidata.org/archives/1390Nginx的内存池实现得很精巧,代码也很简洁。总的来说,所有的内存池基本都一个宗旨:申请大块内存,避免“细水长流”。一、创建一个内存池nginx内存池主要有下面两个结构来维护,他们分别维护了内存池的头部和数据部。此处数据部就是供用户分配小块内存的地方。//该结构用来维护内存池的数据块,供用户分配之用。 typedefst
chanlp129
·
2013-04-15 23:00
nginx源码分析
—hash结构ngx_hash_t(v1.0.4)
http://blog.csdn.net/livelylittlefish/article/details/6636229Content0.序1.hash结构1.1ngx_hash_t结构1.2ngx_hash_init_t结构1.3ngx_hash_key_t结构1.4hash的逻辑结构2.hash操作2.1NGX_HASH_ELT_SIZE宏2.2hash函数2.3hash初始化2.4hash
ywh147
·
2013-03-14 10:00
Nginx源码分析
-内存池
Nginx的内存池实现得很精巧,代码也很简洁。总的来说,所有的内存池基本都一个宗旨:申请大块内存,避免“细水长流”。一、创建一个内存池nginx内存池主要有下面两个结构来维护,他们分别维护了内存池的头部和数据部。此处数据部就是供用户分配小块内存的地方。//该结构用来维护内存池的数据块,供用户分配之用。 typedefstruct{ u_char*last;//当前内存分配结束位置,即下一段可分配内
macyang
·
2013-01-03 22:00
Nginx @tbdata
启动初始化过程(二)Nginx进程管理之master进程Nginx进程管理之worker进程Nginx的master和worker进程间的通信Nginx事件驱动的初始化Nginx的connections数组
Nginx
macyang
·
2013-01-03 11:00
文章5:
Nginx源码分析
--事件循环
欢迎转载,转载请注明出处http://blog.csdn.net/yankai0219/article/details/8453297文章内容0.序1.概述:2.几个变量的作用3.ngx_process_events_and_timers结构图4.ngx_process_events_and_timers函数详解5.分析Nginx对accept事件的处理6.小结 0.序: 本文学习了阿里巴巴大牛们
yankai0219
·
2012-12-30 19:00
nginx源码分析
(1)——启动过程
http://blog.csdn.net/chosen0ne/article/details/77282941.重要的数据结构 1.ngx_module_t nginx中所有模块的类型都是ngx_module_t类型的,定义了模块的一些属性。nginx是完全模块化的,所有的组件都是模块,从而实现了nginx的高度松耦合。同时,我们在进行nginx模块开发时,也离不开这个数据结构。[c
DotNetFirst
·
2012-10-29 14:00
nginx源码分析
之事件机制
事件机制尤如nginx的心脏一般,不停的运转,保证了nginx的请求响应模式得以正常工作。本文将剖析事件机制的原理和实现。nginx本身支持多种机制,如poll,epoll,select,aio,kqueue等,这里分析epoll,因为这是nginx的杀手锏。初略接触时,我们大概只知道监听、请求、接受、响应这几个概念。我们沿着这个思维展开,看nginx如何设计这些结构体的。1、大体上设计不管是监听
那一剑的风情
·
2012-10-17 11:00
nginx源码分析
服务器数据库系列 -
Nginx源码分析
-内存池
Nginx源码分析
-内存池Nginx的内存池实现得很精巧,代码也很简洁。总的来说,所有的内存池基本都一个宗旨:申请大块内存,避免“细水长流”。
initphp
·
2012-10-16 12:00
nginx源码分析
(9)——filter模块
phasehandler处理中介绍了contenthandler用于产生响应内容,随便找一个contentphase的模块,比如:ngx_http_static_module.c,会发现在contenthandler中会调用ngx_http_send_header,然后最后调用ngx_http_output_filter。这两个函数就是发送响应头部和响应体的,在nginx中输出内容是通过f
chosen0ne
·
2012-10-11 18:00
nginx源码分析
(8)——phase handler处理
nginx将请求的处理过程划分为11个phase(阶段),相当于是对请求处理的一种抽象,便于定制处理过程。这个11个phase,分别是(定义在http/ngx_http_core_module.h):typedefenum{ NGX_HTTP_POST_READ_PHASE=0,/*读取请求*/ NGX_HTTP_SERVER_REWRITE_PHASE,/*server级别的rewri
chosen0ne
·
2012-10-10 14:00
nginx源码分析
(7)——请求处理
在建立连接过程中,对于nginx监听到的每个客户端连接,都会将它的读事件的handler设置为ngx_http_init_request函数,这个函数就是请求处理的入口。在处理请求时,主要就是要解析http请求,比如:uri,请求行等,然后再根据请求生成响应。下面看一下nginx处理的具体过程。1.ngx_http_init_request 在ngx_http_init_connec
chosen0ne
·
2012-10-09 11:00
nginx源码分析
之配置图解
nginx配置结构清晰,层次分明,这得益于整个架构的模块化设计,文本将揭示配置文件如何被处理和应用。 整个配置文件解析后的结果如图这样存储。一、解析的核心机制nginx源码里,ngx_conf_t是解析的关键结构体ngx_conf_handler函数里:/*setupthedirective'sconfigurationcontext*/ conf=NULL; /*direct指令,一般是core
那一剑的风情
·
2012-09-28 11:00
nginx源码分析
之设计之美
在这里向nginx的作者IgorSysoev致敬,他开发了一个如此伟大的作品。毫不夸张的说,nginx已经展现了一个成功的项目代码是应该如何架构的了。本文将试图与读者分享这里面的设计之美。大千世界,任何东西都有共通之处。当我们讨论一个东西时,首先要给它定义个边界,在这边界里有两个东西:内核(Kernel)和用户(User)。nginx作为http服务器(其实远不止),我们给它定义边界:实现http
那一剑的风情
·
2012-09-25 17:00
文章10:
Nginx源码分析
----Nginx如何获得数据包(未完成)
文章有问题 请大家去阅读 http://tengine.taobao.org/book/index.html 中的内容欢迎大家转载,转载请注明出处http://blog.csdn.net/yankai0219/article/details/8011042来自yankai02190.序1.正文 问题1:如何从网络设备中获得数据?专业点的话,Linux网络协议栈中数据包的处理过程 问题2:应
yankai0219
·
2012-09-23 22:00
nginx
网络
struct
网络协议
linux内核
nginx源码分析
之模块化
模块化编程是C的核心思想,而nginx将这一思想发挥到淋漓尽致。在阅读源码之前,自己动手写一个模块是最好的入门方式,本文将引导读者如何写一模块,并分析nginx是如何设计模块化的。我将以helloworld为例,实现访问http://yourdomain/hello时,页面上将出现helloworld1、创建一个目录:hello2、创建源文件:ngx_http_hello_module.c3、创建
那一剑的风情
·
2012-09-20 10:00
nginx源码分析
nginx源码分析
之开篇
nginx源码构思精巧,每每阅读颇有收获,写此文与各码农分享阅读从main开始,流程非常清晰/*系统错误初始化,将构建ngx_sys_errlist*/ngx_strerror_init();/*选项处理*/ngx_get_options(argc,argv);/*时间初始化,当前时间:ngx_current_msec*/ngx_time_init();/*日志初始化*/log=ngx_log_i
那一剑的风情
·
2012-09-18 16:00
nginx源码分析
ngx_cycle的初始化及Graphviz dot使用 生成图
nginx源码分析
—全局变量ngx_cycle的初始化可以看http://www.oschina.net/question/234345_42061其中有个神器:用Graphviz可视化函数调用https
haoningabc
·
2012-09-16 17:00
nginx
代码生成图
nginx源码分析
(19)-方法(3)
nginx的三个部分:核心、事件模型/并发模型、应用模块,之前已经详细了分析了核心和事件模型/并发模型两个部分,也详细解释了nginx的模块化设计。之前的分析采用了平铺直叙的方式,对源码中主要函数进行了流程化的分解和剖析,经过这种分析方式,对nginx的认识越来越全面和深入,相关的领域知识和背景知识也越来越丰富。但是这种分析方法比较直白,分析不够深入和透彻,缺少总结和对比,只是阐述如何做,没有阐述
DotNetFirst
·
2012-09-14 11:00
nginx源码分析
(17)-模块分析(3)
前面已经分析了nginx的事件处理机制的构建阶段,也分析过nginx的进程模型,利用上一篇文章中总结的并发模型设计的知识,先总结介绍一下nginx的并发模型,然后剖析nginx事件处理机制运行阶段的处理过程。nginx的进程模型采用的是prefork方式,预先分配的worker子进程数量由配置文件指定,默认为1。master主进程创建监听套接口并监听客户连接,每个worker子进程独自accept
DotNetFirst
·
2012-09-14 11:00
nginx源码分析
(16)-模块分析(2)
对一个高性能服务器来说,一般都要求处理速度快和资源占用小,尤其是当服务器遇到C10K问题的时候。要做到处理速度足够快,其并发模型的设计相当关键;而要做到资源尤其是内存资源的占用少,就要依赖于其资源分配和资源管理的方案设计。网上有一些比较apache、lighttpd和nginx的文章,一般认为apache的功能完善,但是并发能力较弱,资源占用较多,一般并发量达到一千以上,服务已经比较吃力,进程切换
DotNetFirst
·
2012-09-14 11:00
nginx源码分析
(15)-模块分析(1)
nginx的内部实现上用四个模块上下文结构把所有模块从实现上分开为四种,不同的模块上下文支持不同的模块钩子。如果抛开实现方式,仅仅从功能逻辑上来区分,大致可以把所有模块分为三类,第一类是nginx的内核模块;第二类是http模块;第三类是mail模块。内核模块包含核心类模块、event类模块和没有模块上下文结构的conf模块;http模块是所有的http类模块;mail模块是所有的mail类模块。
DotNetFirst
·
2012-09-14 11:00
nginx源码分析
(14)-运维与配置(2)
事件模块的指令集主要是配置epoll、kqueue、select、poll等,这些指令控制nginx处理连接的方式,这些指令有: 1、accept_mutex语法形式:accept_mutex[on|off]默认值:on nginx使用acceptmutex保护accept()系统调用。acceptmutex在不同的系统上会使用原子指令实现或者使用文件上锁实现。 2、accept_mutex_de
DotNetFirst
·
2012-09-14 11:00
nginx源码分析
(13)-运维与配置(1)
http://blog.csdn.net/kenbinzhang/article/details/4722359nginx现在已经支持很多功能,系统内已经实现的模块多达72个,这些模块提供了若干配置指令来设置和控制nginx的相关处理过程。 为了能够更深入的进行接下来的源码分析,利用一些篇幅讨论一下nginx的运维和配置相关的内容,主要参考了nginx的英文wiki资料,按照自己的思路整理成ngi
DotNetFirst
·
2012-09-14 11:00
nginx源码分析
(12)-进程启动分析(2)
第四个剖析的是worker子进程的执行函数ngx_worker_process_cycle(src/os/unix/ngx_process_cycle.c)。staticvoidngx_worker_process_cycle(ngx_cycle_t*cycle,void*data){ ngx_uint_t i; ngx_connection_t *c; //初始化
DotNetFirst
·
2012-09-14 11:00
nginx
timer
socket
cmd
command
Sockets
nginx源码分析
(11)-进程启动分析(1)
nginx的进程启动过程是在ngx_master_process_cycle(src/os/unix/ngx_process_cycle.c)中完成的(单进程是通过ngx_single_process_cycle完成,这里只分析多进程的情况),在ngx_master_process_cycle中,会根据配置文件的worker_processes值创建多个子进程,即一个master进程和多个work
DotNetFirst
·
2012-09-14 11:00
nginx源码分析
(10)-启动过程分析
http://blog.csdn.net/kenbinzhang/article/details/4681694nginx有两个重要头文件:ngx_config.h和ngx_core.h。src/core/ngx_config.h文件中包含的是和操作系统相关的宏定义和头文件,其中又会包含objs/ngx_auto_headers.h和src/os/unix/ngx__config.h,前面提到过,
DotNetFirst
·
2012-09-14 11:00
nginx源码分析
(9)-模块化(4)
模块的上下文是四个结构体定义的:ngx_core_module_t、ngx_event_module_t、ngx_http_module_t、ngx_mail_module_t,分别对应于四类模块。typedefstruct{ ngx_str_t name; void *(*create_conf)(ngx_cycle_t*cycle);
DotNetFirst
·
2012-09-14 11:00
nginx
struct
Module
null
FreeBSD
merge
nginx源码分析
(8)-模块化(3)
接下来剖析模块的指令。模块的指令在源码中是ngx_command_t结构的变量,ngx_command_t的声明在src/core/ngx_conf_file.h中:structngx_command_s{ ngx_str_t name; ngx_uint_t type; char *(*set)(ngx_conf_t
DotNetFirst
·
2012-09-14 11:00
nginx源码分析
(7)-模块化(2)
http://blog.csdn.net/kenbinzhang/article/details/4656815分析nginx的模块化架构的实现方式,就要从ngx_module_t结构体入手。ngx_module_t的声明在src/core/ngx_conf_file.h中:#defineNGX_MODULE_V1 0,0,0,0,0,0,1#defineNGX_MODULE_V1
DotNetFirst
·
2012-09-14 11:00
nginx源码分析
(6)-模块化(1)
源码的src/core目录下实现了不少精巧的数据结构,最重要的有:内存池ngx_pool_t、缓冲区ngx_buf_t、缓冲区链ngx_chain_t、字符串ngx_str_t、数组ngx_array_t、链表ngx_list_t、队列ngx_queue_t、基于hash的关联数组ngx_hash_t、红黑树ngx_rbtree_t、radix树ngx_radix_tree_t等,这些数据结构频繁
DotNetFirst
·
2012-09-14 11:00
数据结构
nginx
filter
Module
header
null
nginx源码分析
(5)-方法(2)
利用nginxwiki和互联网收集了不少nginx相关的文档资料,但是仔细阅读之后发觉对理解nginx架构有直接帮助的资料不多,一些有帮助的资料也要结合阅读部分源码细节才能搞清楚所述其是,可能nginx在非俄国之外的环境下流行不久,应用还很简单,相关的英文和中文文档也就不够丰富的原因吧。不过还是有一些金子的。如果要了解nginx的概况和使用方法,wiki足以满足需要,wiki上有各个模块的概要和详
DotNetFirst
·
2012-09-14 10:00
apache
c
nginx
互联网
文档
语言
nginx源码分析
(4)-方法(1)
看了几天的源码,进度很慢,过于关注代码实现的细节了,反而很难看清整体结构。于是问诸google寻找方法。大体上分析源代码都要经历三遍过程,第一遍是浏览,通过阅读源码的文档和注释,阅读接口,先弄清楚每个模块是干什么的而不关心它是怎么做的,画出架构草图;第二遍是精读,根据架构草图把系统分为小部分,每个部分从源码实现自底向上的阅读,更深入细致的理解每个模块的实现方式以及与模块外部的接口方式等,弄明白模块
DotNetFirst
·
2012-09-14 10:00
编程
nginx
文档
工具
图形
Graphviz
nginx源码分析
(3)- 自动脚本
nginx的自动脚本指的是configure脚本程序和auto子目录下面的脚本程序。自动脚本完成两件事情,其一是检查环境,其二是生成文件。生成的文件有两类,一类是编译代码需要的Makefile文件,一类是根据环境检查结果生成的c代码。生成的Makefile很干净,也很容易阅读。生成的c代码有三个文件,ngx_auto_config.h是根据环境检查的结果声明的一些宏定义,这个头文件被include
DotNetFirst
·
2012-09-14 10:00
nginx
脚本
include
makefile
编译器
Graphviz
nginx源码分析
(2)- 概览
http://blog.csdn.net/kenbinzhang/article/details/4653202源码分析是一个逐步取精的过程,最开始是一个大概了解的过程,各种认识不会太深刻,但是把这些真实的感受也记录下来,觉得挺有意思的,可能有些认识是片面或者是不正确的,但可以通过后面更深入细致的分析过程,不断的纠正错误和深化理解。源码分析是一个过程,经验是逐步累积起来的,希望文字可以把这种累积的
DotNetFirst
·
2012-09-14 10:00
数据结构
nginx
脚本
FreeBSD
makefile
events
nginx源码分析
(1)- 缘起
http://blog.csdn.net/kenbinzhang/article/details/4653201nginx是一个开源的高性能web服务器系统,事件驱动的请求处理方式和极其苛刻的资源使用方式,使得nginx成为名副其实的高性能服务器。nginx的源码质量也相当高,作者“家酿”了许多代码,自造了不少轮子,诸如内存池、缓冲区、字符串、链表、红黑树等经典数据结构,事件驱动模型,http解析
DotNetFirst
·
2012-09-14 10:00
ngx_cycle的初始化及Graphviz dot使用 生成图
nginx源码分析
—全局变量ngx_cycle的初始化可以看http://www.oschina.net/question/234345_42061其中有个神器:用Graphviz可视化函数调用https
haoningabc
·
2012-09-03 21:00
nginx
代码生成图
nginx源码分析
(6)——建立连接
对于webserver来说,必须能够监听到客户端的连接才能与之通信,这篇文章就看一下nginx是如何实现连接的建立。监听到新的连接实际上就是监听socket上的读事件,此时监听socket的已完成连接队列是非空的,可以非阻塞的调用accpet获取新到的连接。在nginx中每个socket都会被封装成一个连接结构,就是ngx_connection_t类型。每个ngx_connection_t
chosen0ne
·
2012-08-09 18:00
nginx源码分析
(5)——监听socket初始化
在
nginx源码分析
(4)中,看到了nginx的事件模型,但其中没有介绍监听socket的初始化。而对于webserver来说,需要通过监听socket来监听客户端的连接等。
chosen0ne
·
2012-07-18 15:00
nginx源码分析
(4)——事件模型
对于一个服务器来说,事件模型是至关重要的,nginx本身的高性能也要归功于其优秀的事件模型。一般地,nginx的事件模型是基于epoll的,而使用epoll需要调用epoll_create、epoll_ctl和epoll_wait三个函数。由于nginx本身的松耦合模块机制,这些函数的调用被隐藏在很难发现的地方,本篇文章就来介绍nginx的事件模型的初始化过程,从而大家可以清晰的知道epoll各个
chosen0ne
·
2012-07-12 23:27
Web
Server
源码之路
Nginx
nginx源码分析
(4)——事件模型
对于一个服务器来说,事件模型是至关重要的,nginx本身的高性能也要归功于其优秀的事件模型。一般地,nginx的事件模型是基于epoll的,而使用epoll需要调用epoll_create、epoll_ctl和epoll_wait三个函数。由于nginx本身的松耦合模块机制,这些函数的调用被隐藏在很难发现的地方,本篇文章就来介绍nginx的事件模型的初始化过程,从而大家可以清晰的知道epo
chosen0ne
·
2012-07-12 23:00
nginx源码分析
(3)——进程模型
原本计划这一篇的内容是配置文件的解析,不过为了连贯性,还是继续nginx初始化的过程。nginx的进程模型与大多数http服务器采用的模型是一样的,都是Master-Worker模型。Master进程负责处理外部信号,同时管理所有的Worker进程。而Worker进程就是用来处理连接的建立、请求和响应,大部分的事件处理都是在worker进程中。1.基本的数据结构 1.ngx_proc
chosen0ne
·
2012-07-11 17:00
nginx
manager
socket
HTTP服务器
Signal
delay
nginx源码分析
(2)——http模块的初始化过程
前一篇文章介绍了nginx的启动初始化过程,包括了所有模块的初始化过程,比如http模块、事件模块等。这里再详细介绍一下http模块的启动过程,还记得在前一篇文章中提到过ngx_conf_parse函数背后隐藏了大量的细节吗?这里就揭开这层神秘的面纱,去看看几个重要的http模块是如何初始化的。这里依然沿用上一篇文章的结构,首先来看几个重要的数据结构。1.重要的数据结构 1.ngx_
chosen0ne
·
2012-07-10 19:00
nginx源码分析
(1)——启动过程
1.重要的数据结构1.ngx_module_tnginx中所有模块的类型都是ngx_module_t类型的,定义了模块的一些属性。nginx是完全模块化的,所有的组件都是模块,从而实现了nginx的高度松耦合。同时,我们在进行nginx模块开发时,也离不开这个数据结构。structngx_module_s{/***在具体类型模块(http、event等)的全局配置结构数组的下标。以httpmodu
chosen0ne
·
2012-07-09 18:34
Web
Server
源码之路
Nginx
nginx源码分析
(1)——启动过程
1.重要的数据结构 1.ngx_module_t nginx中所有模块的类型都是ngx_module_t类型的,定义了模块的一些属性。nginx是完全模块化的,所有的组件都是模块,从而实现了nginx的高度松耦合。同时,我们在进行nginx模块开发时,也离不开这个数据结构。structngx_module_s{ /** *在具体类型模块(http、event等)的全局配置结构数组的下标
chosen0ne
·
2012-07-09 18:00
最好的nginx模块开发例子
nginx源码分析
03-最好的nginx模块开发例子0.引子在开始阅读源码之前,动手实践下将对你有很大的帮助。本文将搭一个入门级的环境,一步步演示模块开发是怎么回事。
奋斗163
·
2012-06-20 09:00
nginx源码分析
nginx模块开发
Nginx 源码分析-- 模块module 解析执行 nginx.conf 配置文件流程分析 一
在探究源码之前,需要对nginx下的模块module有个基本的认知(详情参考前面的博文
Nginx源码分析
--浅谈对模块module的基本认知)
姜子轩
·
2012-06-18 01:00
上一页
1
2
3
4
5
6
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他