nginx源代码分析--ngx_http_optimize_servers()函数
这个函数做了连部分工作:1)以port为入口点 将实用的信息存放到hash表内 2)调用ngx_http_init_listening()函数 对port进行监听
1、 在ngx_http_core_main_conf_t结构体中有一个字段为ports,是一个数组,数组内存放的全是ngx_http_conf_port_t;对于每个端口信息(ngx_http_conf_port_t),调用
ngx_http_server_names函数,同一时候也调用ngx_http_init_listening函数,这里先分析ngx_http_server_names函数。
2)对于每个端口信息(ngx_http_conf_port_t),里面有一个字段为addrs,这个字段是一个数组,这个数组内存放的全是地址信息(ngx_http_conf_addr_t),一个地址信息
(ngx_http_conf_addr_t)相应着多个server{}配置块(ngx_http_core_srv_conf_t)3
3)对于每个server{}配置块信息(ngx_http_core_srv_conf_t)相应着非常多个sever_name.所以,ngx_http_core_srv_conf_t结构体中有一个数组server_names,成员是ngx_http_server_name_t,这样对每个server_name(ngx_http_server_name_t)进行操作,存放到hash表内
这样就完毕了以端口(ngx_http_conf_port_t)为入口点 对全部的地址都进行遍历,将全部的server_name都存放到hash表内
二、ngx_http_init_listening()函数调用
在ngx_http_core_main_conf_t结构体中存放着一个Port信息的数组,对于每个port进行ngx_http_init_listening 的操作,对每个ngx_http_conf_addr_t信息调用
ngx_http_add_listening()函数,为何每个port相应非常多个地址呢?也就是说非常多歌IP地址都在这个port上监听着。
在ngx_http_add_listening函数调用ngx_create_listening,相应一个地址信息产生一个ngx_listening_t的结构体,最最重要的是这个监听套接字上的回调是ngx_http_init_connection函数,这个一个监听套接字上接收到HTTP请求成功后(accept成功后 创建新的连接后,调用accept连接时在函数ngx_event_accept函数中,这个函数最为一个可读事件上的回调,非常显然,这个ngx_listening_t结构体上包括的一个事件结构体上的回调,只是这个注冊是在ngx_event_process_init函数,这个函数作为ngx_event_core_module中的init_porcess回调,这个回调是在ngx_worker_process_cycle中被调用,作为worker进程的初始化,也就是说,worker进程初始化的时候才将监听套接字上的可读事件的回调设置为ngx_event_accep,在ngx_event_accept函数中完毕accept后,直接调用监听套接字上的handler,也就是ngx_http_init_connection函数)開始的。ngx_http_init_connection函数让http请求进入到HTTP的11个阶段。
nginx源代码分析--ngx_http_optimize_servers()函数的更多相关文章
- Nginx源代码分析—业务流程
Nginx源代码分析-业务流程 到此为止,我们如果ngx_init_cycle已经结束.我们临时无论他做了什么,我们从他做的效果进入. 从常理上来讲,假设一个请求到达,那么我们须要接受这个请求,那么就 ...
- 新秀nginx源代码分析数据结构篇(四)红黑树ngx_rbtree_t
新秀nginx源代码分析数据结构篇(四)红黑树ngx_rbtree_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csd ...
- 新秀nginx源代码分析数据结构篇(两) 双链表ngx_queue_t
nginx源代码分析数据结构篇(两) 双链表ngx_queue_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn. ...
- nginx源代码分析--进程间通信机制 & 同步机制
Nginx源代码分析-进程间通信机制 从nginx的进程模型能够知道.master进程和worker进程须要通信,nginx中通信的方式有套接字.共享内存.信号.对于master进程,从外部接受信号, ...
- nginx源代码分析之内存池实现原理
建议看本文档时结合nginx源代码. 1.1 什么是内存池?为什么要引入内存池? 内存池实质上是接替OS进行内存管理.应用程序申请内存时不再与OS打交道.而是从内存池中申请内存或者释放内存到内存池 ...
- nginx源代码分析--配置文件解析
ngx-conf-parsing 对 Nginx 配置文件的一些认识: 配置指令具有作用域,分为全局作用域和使用 {} 创建其他作用域. 同一作用域的不同的配置指令没有先后顺序:同一作用域能否使用同样 ...
- nginx源代码分析--监听套接字的创建 套接字的监听 HTTP请求创建连接
作为一个webserver,那么肯定是有监听套接字的,这个监听套接字是用于接收HTTP请求的,这个监听套接字的创建是依据配置文件的内容来创建的,在nginx.conf文件里有多少个地址就须要创建多少个 ...
- nginx源代码分析--从源代码看nginx框架总结
nginx源代码总结: 1)代码中没有特别绕特别别扭的编码实现.从变量的定义调用函数的实现封装,都非常恰当.比方从函数命名或者变量命名就能够看出来定义的大体意义,函数的基本功能,再好的架构实如今编码习 ...
- nginx源代码分析--模块分类
ngx-modules Nginx 基本的模块大致能够分为四类: handler – 协同完毕client请求的处理.产生响应数据.比方模块, ngx_http_rewrite_module, ngx ...
随机推荐
- JavaScript--模块化 JavaScript module designer
module: 模块就是实现特定功能的一组方法.1.在首页的一个接口js;首先下载好require.js文件引入首页. <script src="require.js" da ...
- F的ACM暑期集训计划
暑假的知识计划(补充中...) 1.数论相关 (7days) 待完成 多项式同余方程/高次同余方程/欧拉函数/克莱姆法则/高斯消元/莫比乌斯反演/伪素数判定/baby-step-gaint-step ...
- Node中的JavaScript和浏览器中的JavaScript的区别
浏览器中的JavaScript: 1.基于ECMAscript规范,这个规范规定了语法 2.添加了dom:用来处理文档 document object model 3.添加了BOM:用于操作浏览器 w ...
- Java Drp项目实战——Servlet
由来 在解说Servlet之前须要先介绍一个词语CGI即Common GatewayInterface是通用网关接口的意思.它提供一个计算机程序同HTTP协议或者WWW服务的接口,也就是人机交互接口的 ...
- android 4.4 添加物理按键
kernel下添加 Linux-3.4/drivers/input/keyboard/Makefile linux-3.4/drivers/input/keyboard/sw-keyboard.c s ...
- FansMail:邮件发送标准API与技术实现(Java)
发送邮件,是Web系统等IT建设中最常见的一种功能. 我对最常见的一种需求进行了抽象和封装,定义了一套标准的API,并且使用Java技术实现. 项目信息 项目名称:FansMail 项目作者:LeiW ...
- 从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接)
从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接) 一.总结 一句话总结:最好的是这个:"SELECT * FROM table WHERE id >= (( ...
- 关于pcb铺铜
- nios博文
小时不识月:http://www.cnblogs.com/yuphone/archive/2010/09/20/1831448.html cracy bingo:http://www.cnblogs. ...
- 16进制串与ASCII字符串相互转换
提供两个函数,方便十六进制串与ASCII 字符串之间的相互转换,使用函数需要注意的是返回的串是在堆上通过 calloc 分配的,所以,记得使用完返回值释放该块,并且将指向该块的指针 =NULL .// ...