zoukankan      html  css  js  c++  java
  • Nginx事件处理中的connection和read、write事件的关联

    /*********************************************************************
     * 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);


  • 相关阅读:
    前端JS 4
    前端JS 3
    前端JS 2
    前端JS 1
    JS的知识补丁
    去除inline-block元素间的空隙
    js中“||”和“&&”的高级用法
    WebAPP-1
    Node.js_1
    click和onclick的区别
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/6848047.html
Copyright © 2011-2022 走看看