Libevent庫(kù)是用來(lái)開(kāi)發(fā)高效,可移植的非阻塞IO。它的設(shè)計(jì)目標(biāo):
1. 可移植性
2. 高效性:Libevent試圖使用每一個(gè)平臺(tái)上的最高效的非阻塞IO的實(shí)現(xiàn)
3. 可擴(kuò)大性:Libevent被設(shè)計(jì)成,即便程序需要去處理上萬(wàn)條活躍的socket也能運(yùn)行良好。
4. 方便性:不管在甚么情況下,用最正常的方式去用libevent寫1個(gè)程序,都可能穩(wěn)定,可移植。
Libevent庫(kù)包括以下幾個(gè)模塊:
1. evutil:通用的功能,已抽象出不同平臺(tái)之間的差異。
2. event和event_base:相當(dāng)于libevent的心臟。為各個(gè)平臺(tái)的基于事件的非阻塞IO提供了1個(gè)統(tǒng)1的接口。當(dāng)socket準(zhǔn)備好讀或?qū)懀虍a(chǎn)生超時(shí),或當(dāng)有系統(tǒng)信號(hào)抵達(dá),它都會(huì)通知你。
3. bufferevent:這些方法為libevent的event-based核心提供了更方便的包裝。它讓你主動(dòng)去要求已緩沖的讀和寫,而不是當(dāng)IO產(chǎn)生時(shí),才去通知你這些已準(zhǔn)備好了。
bufferevent接口也能夠有多個(gè)后端,所以它可以充分發(fā)揮系統(tǒng)的優(yōu)勢(shì),提供更高效的非阻塞IO,就像Windows的IOCP接口。
4. evbuffer:這個(gè)模塊實(shí)現(xiàn)的是bufferevent下面的buffer,提供了可方便,高效訪問(wèn)的方法。
5. evhttp:簡(jiǎn)單的HTTP客戶端、服務(wù)器的實(shí)現(xiàn)。
6. evdns:簡(jiǎn)單的DNS客戶端、服務(wù)器的實(shí)現(xiàn)。
7. evrpc:簡(jiǎn)單的RPC實(shí)現(xiàn)。
庫(kù)
當(dāng)Libevent被構(gòu)建時(shí),默許的它需要安裝以下幾個(gè)類庫(kù)
1. libevent_core:所有的核心event和buffer相干方法。包括所有的event_base,evbuffer,bufferevent,還有通用方法。
2. libevent_extra:定義了協(xié)議相干的方法。在你的代碼里可能需要用到,包括HTTP,DNS,RPC。
3. libevent:歷史遺漏,不應(yīng)當(dāng)使用。在將來(lái)的版本中可能會(huì)被去掉。
下面的庫(kù)可能在某些平臺(tái)上用到:
1. libevent_pthreads:在pthread的可移植線程庫(kù)的基礎(chǔ)上增加了線程和鎖的實(shí)現(xiàn)。它跟libevent_core是分開(kāi)的,如果你不使用多線程的方式使用libevent,你不需要去鏈接pthread庫(kù)。
2. libevent_openssl:這個(gè)庫(kù)通過(guò)封裝bufferevents和OpenSSL庫(kù),提供了對(duì)加密鏈接的支持。它跟libevent_core也是分開(kāi)的,如果你不使用加密鏈接,就不需要去鏈接OpenSSL庫(kù)。
頭文件
目前所有的公共頭文件都在event2目錄下。頭文件被分為3大類:
1. API頭文件:定義了Libevent的公共接口。這些頭文件沒(méi)有特殊后綴。
2. 兼容性頭文件:包括了1些已廢棄的方法。如果不是從1個(gè)舊版本移植程序,不建議包括它。
3. 結(jié)構(gòu)體頭文件:定義了結(jié)構(gòu)體。其中1些是用來(lái)快速訪問(wèn)的,還有1些是由于歷史緣由被暴露出來(lái)。有了這些結(jié)構(gòu)體的定義,你可以方便的調(diào)試。這些頭文件帶有后綴"_struct.h"。