|
/*********************************************************************
* 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.data = next;
c.read = &cycle->read_events;
c.write = &cycle->write_events;
c.fd = (ngx_socket_t) -1;
next = &c;
#if (NGX_THREADS)
c.lock = 0;
#endif
} while (i);
版权声明:本文为博主原创文章,未经博主允许不得转载。 |
|