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 ...
随机推荐
- 33.Node.js 文件系统fs
转自:http://www.runoob.com/nodejs/nodejs-module-system.html Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API. Node ...
- 2.1 Producer API官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ 2.1 Producer API 2.1.生产者API 我们鼓励所有新开发的程序使用 ...
- 洛谷——P1540 机器翻译
https://www.luogu.org/problem/show?pid=1540#sub 题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的 ...
- Caused by: java.lang.NoSuchMethodError:javax.servlet.http.HttpServletRequest.getServletContext()L
在做项目的时候,出现Caused by: java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getServletCo ...
- 15个常用的javaScript正则表达式--来自于javascript公众号
摘要 收集整理了15个常用的javaScript正则表达式,其中包括用户名.密码强度.整数.数字.电子邮件地址(Email).手机号码.身份证号.URL地址. IPv4地址. 十六进制颜色. 日期. ...
- Docker---(4)Docker 部署spring web项目
原文:Docker---(4)Docker 部署spring web项目 版权声明:欢迎转载,请标明出处,如有问题,欢迎指正!谢谢!微信:w1186355422 https://blog.csdn.n ...
- maven的pom.xml配置文件讲解
<project xmlns="http://maven.apache.org/POM/4.0.0 " xmlns:xsi="http://www.w3.o ...
- 洛谷—— P1434 滑雪
https://www.luogu.org/problem/show?pid=1434#sub 题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜 ...
- Linux常用命令及解析
基本日常命令 init 3 (进入命令行页面) steup (设置网络) exit (退出用户) pwd(查看当前所在目录) date(查看当前系统时间) 举例:(date +%Y-%m-%d)以年月 ...
- 翻翻git之---闪烁动画的TextView RevealTextView
转载请注明出处:王亟亟的大牛之路 今天没有P1啦!. 对换工作有想法的.能够找昨天的P1.哈哈 地址:http://blog.csdn.net/ddwhan0123/article/details/5 ...