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