通过在群里大家的讨论,我总结了两点问题,很多初学者都问过:
1. ngixn事件处理中关于active和ready的问题
2. ngx_connection_t与ngx_http_connection_t结构的区别与联系
这里分开讨论下。
1. ngixn事件处理中关于active和ready的问题
群里的朋友问过好几次了,这里稍微总结一下:
在nginx的定义里面ngx_connection_t可以看做是四层tcp的抽象,当然除了一些必要的连接信息之外,还有很多其他强大的功能,如有些事件控制相关的变量。对于具体的七层服务,如http,mail等,一般都有各自的具体信息。而这些信息通过ngx_connection_t中的data成员来承载,注意到类型为void *了吧。具体来讲,tcp上承载的http相关信息,使用的是ngx_http_connection_t结构,而mail则使用ngx_mail_session_t。
顺便提一下,下面这个问题也有很多新人问过:
“在ngx_http_init_requst中,这里的c->data 是从ngx_get_connection 拿出来的,原来指向的是下一个free connection 。我跟了下代码,也没发现有什么地方改过c->data”。
其实在ngx_get_connection函数中,有个操作是ngx_memzero(c, sizeof(ngx_connection_t)),所以初始的c->data是NULL。