通過在羣裏大家的討論,我總結了兩點問題,很多初學者都問過:
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。