前面講了lighttpd的插件系統(tǒng),這一篇將看一看lighttpd中的fdevent系統(tǒng)。fdevent系統(tǒng)主要是處理各種IO事件,在web服務(wù)器中,主要就是向socket寫數(shù)據(jù)和從socket讀數(shù)據(jù)。通常,web服務(wù)器是IO密集型程序,這就要求在數(shù)據(jù)的讀寫上,web服務(wù)器必須能夠具有很好的性能,不會(huì)因?yàn)槟硞€(gè)socket的阻塞而致使其他socket也被阻塞,否則會(huì)大大降低服務(wù)器的性能。因此,大部分的web服務(wù)器都采用非阻塞IO進(jìn)行數(shù)據(jù)的讀寫。lighttpd通過fdevent系統(tǒng),采用類似OO中面向?qū)ο蟮姆绞綄?duì)IO事件的處理進(jìn)行封裝,對(duì)于不同的IO系統(tǒng),提供一個(gè)統(tǒng)一的接口。
lighttpd采用了所謂的Reactor模式,也就是非阻塞IO加多路復(fù)用(non-blocking IO + IO multiplexing)。在多路復(fù)用上,lighttpd通過fdevent將各種不同的實(shí)現(xiàn)進(jìn)行封裝。lighttpd使用的多路IO有如下幾個(gè):

下面看一下fdevent.h中fdevents結(jié)構(gòu)體,這個(gè)結(jié)構(gòu)體相當(dāng)于是一個(gè)虛基類,其中的函數(shù)指針是純虛函數(shù)。對(duì)于每種實(shí)現(xiàn),則相當(dāng)于是繼承了這個(gè)基類并實(shí)現(xiàn)了其中的純虛函數(shù),也就是給函數(shù)指針賦一個(gè)函數(shù)地址值。下面是代碼:



......本站只呈現(xiàn)部分內(nèi)容,查看完整文章請(qǐng)到WiFiDog官網(wǎng)社區(qū) http://www.wifidog.pro/2015/04/20/wifidog%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90lighttpd%E5%AF%B9%E5%A4%96%E6%8E%A5%E5%8F%A3.html,轉(zhuǎn)載請(qǐng)注明出處