Nginx事件处理中的connection和read、write事件的关联

原创 2015年07月08日 19:37:55

/*********************************************************************
 * Author  : Samson
 * Date    : 07/08/2015
 * Test platform:
 *              gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
 *              GNU bash, 4.3.11(1)-release (x86_64-pc-linux-gnu) 
 * Nginx version:
 *              Nginx 1.6.2
 *              Nginx 1.8.0
 * *******************************************************************/

Nginx事件处理中的connection和read、write事件的关联:


在Nginx代码中经常看到rev = c->read;ngx_handle_read_event(rev, 0);这样的操作,那么rev是什么呢?

在ngx_epoll_add_event中的ngx_connection_t *c = ev->data;中的ev->data又是什么内容呢?


其实这一切都在ngx_event_process_init找到踪迹,在此函数中进行了cycle全局结构的read_events、write_events、connections的空间的生成及这三者间的关联关系。

这3个结构的生成的代码:

cycle->connections = ngx_alloc(sizeof(ngx_connection_t) * cycle->connection_n, cycle->log);


cycle->read_events = ngx_alloc(sizeof(ngx_event_t) * cycle->connection_n, cycle->log);


cycle->write_events = ngx_alloc(sizeof(ngx_event_t) * cycle->connection_n, cycle->log);


//read_events、write_events、connections的关联,这三者在cycle中的下标相等的表示是一个连接的事件和连接对应的fd等信息,这些信息在后期的时候会直接用到

c = cycle->connections;

i = cycle->connection_n;

next = NULL;


do {

i--;


c[i].data = next;

c[i].read = &cycle->read_events[i];

c[i].write = &cycle->write_events[i];

c[i].fd = (ngx_socket_t) -1;


next = &c[i];


#if (NGX_THREADS)

c[i].lock = 0;

#endif

} while (i);


Nginx学习笔记(十八):事件处理框架

前言 如果接着上两篇笔记走的话,现在就应该说worker循环工作中的核心处理方法ngx_process_events_and_timers()。但是在看这个功能函数之前,需要先学习相关的 的事件模块内...
  • fzy0201
  • fzy0201
  • 2014年04月08日 19:38
  • 1720

Nginx学习笔记(十八):事件处理框架

前言 如果接着上两篇笔记走的话,现在就应该说worker循环工作中的核心处理方法ngx_process_events_and_timers()。但是在看这个功能函数之前,需要先学习相关的 的事件模块内...
  • fzy0201
  • fzy0201
  • 2014年04月08日 19:38
  • 1720

Nginx的rwrite的参数和配置实例

正则表达式匹配,其中: * ~ 为区分大小写匹配 * ~* 为不区分大小写匹配 * !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配,其中: * -f和!-f用...
  • u012689623
  • u012689623
  • 2014年03月13日 14:26
  • 1643

初探Nginx架构之进程模型与事件处理机制

from http://blog.csdn.net/yankai0219/article/details/8018275 来自yankai0219 文章内容: 0.序 1.概述 2.N...
  • spivic
  • spivic
  • 2013年11月12日 13:52
  • 1288

nginx学习笔记五(nginx的事件模块定义)

在linux后台服务器开发领域里面,epoll的大名是早有所闻。《深入理解nginx》一书在第9章-事件模块中就详细说明了epoll相关的系统调用是怎么嵌入到nginx的框架中。 下面说明nginx...
  • messiran10
  • messiran10
  • 2016年05月19日 16:39
  • 9267

Nginx事件驱动总结

其实最开始想要看nginx的源代码的初衷就是为了搞懂它的nginx的事件驱动到底是怎么回事。。。到现在为止nginx代码的大体结构部分已经看的差不多了,对它的事件驱动也算是有了一个较为全面的了解,终于...
  • kobejayandy
  • kobejayandy
  • 2014年01月29日 22:28
  • 4394

Nginx 事件机制介绍

先看几个主要方法 ngx_add_channel_event 主要是把事件注册到事件池中,并且添加事件 handler,具体要结合后面的事件机制来展开。 ngx_write_chann...
  • wangmanjie
  • wangmanjie
  • 2016年10月12日 08:15
  • 436

【Nginx】事件和连接

不同的操作系统对应不同的事件驱动机制,在Linux 2.6之后使用epoll机制,对应的事件驱动模块是ngx_epoll_module。Nginx的ngx_event_core_module模块根据操...
  • jy02326166
  • jy02326166
  • 2014年07月08日 20:12
  • 1735

read函数和write函数

用read函数从打开的文件中读取数据。 #incldue ssize_t read(int fd, void *buf, size_t nbyte); 返回值:读到的字节数,若已到文件尾,返回0...
  • sanmao0816
  • sanmao0816
  • 2015年01月22日 19:40
  • 1242

Ngixn基础. 认识Nginx事件模块(一)

对于Nginx的整体框架, 尚且只能了解个大概, 并不能弄清除整个流程. 索性先放着, 先了解其他组件. 事件处理框架所要解决的问题是如何收集, 管理, 分发事件. 且事件类型主要为网络事件和定时器事...
  • u012062760
  • u012062760
  • 2015年09月25日 19:30
  • 1188
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Nginx事件处理中的connection和read、write事件的关联
举报原因:
原因补充:

(最多只允许输入30个字)