標籤:style http color io 使用 ar for 檔案 sp
原文連結http://www.wangafu.net/~nickm/libevent-book/Ref0_meta.html
Libevent使用手冊:前瞻
總覽:
Libevent是一個用來寫高效能跨平台非阻塞IO程式的庫.它的設計目標如下:
跨平台
一個使用Libevent的程式應當能夠運行於libevent支援的各種平台.即便有時(某平台可能)沒有一種很好的實現非阻塞IO的方式,libevent也應該用一種還湊合(so-so)的方式,這樣你的程式才能運行於一個嚴苛的環境下。
高速
libevent使用不同平台下可使用的最快的非阻塞IO實現,同時不引入過多的其他開銷.
擴充性
libevent被設計為即便是要處理成千上萬條活躍連結時也工作良好.
便捷性
無論何時,用libevent寫程式的最自然的方式都應該是一種穩定的,跨平台的方式.
Libevent分為以下幾個部分
evutil
對不同平台的網路實現抽象而出的一套通用函數
event和event_base
這是Libevent的核心部分.它針對各種各樣的平台相關的,基於事件的非阻塞IO(platform-specific, event-based nonblocking IO backends),抽象出一套API.它能夠告知你何時sockets可讀或可寫,提供了基本的逾時函數,並能夠偵測作業系統訊號.
bufferevent
這些函數在Libevent的基於事件的核心代碼之上(event-based core)提供了更為便捷的封裝.他們使得你的應用程式請求已緩衝的讀寫,所以只有當真正的IO發生的時候,而不是socket可讀寫的時候,它們才會通知你.
bufferevent介面有不同的後端實現,所以他可以充分利用不同平台提供的實現非阻塞IO的快速的方式,例如WINDOWS下的IOCP API.
evbuffer
這個模組實現了作為bufferevents基礎的buffer,並提供了高效的,便於使用的函數.
evhttp
一個簡單的HTTP client/server實現
evdns
一個簡單的DNS client/server實現
evrpc
一個簡單的RPC實現
庫
當安裝了Libevent,預設地,會安裝以下的庫:
libevent_core
含有所有的核心的event和buffer功能.這個庫包含所有的event_base,evbuffer,bufferevent以及公用函數.
libevent_extra
這個庫包含了你的程式可能會用到的一些與特定協議有關的功能.比如HTTP,DNS,RPC.
libevent
這個庫的存在是因為一些曆史原因.它包括了libevent_core和libevent_extra的功能.你不應該用這個庫,它在未來版本的Libevent中會消失.
以下的庫在部分平台上才會被安裝:
libevent_pthreads
這個庫添加了基於跨平台線程庫的線程和鎖的實現.這個庫和libevent_core是分開的,所以當你使用Libevent的時候除非你真的需要以多線程的方式使用Libevent,否則你是不需要連結這個庫的.
libevent_openssl
這個庫使用bufferevents和OpenSSL庫,提供了加密通訊的功能.這個庫和libevent_core是分開的,所以當你使用Libevent的時候除非你真的需要使用加密串連,否則你是不需要連結OpenSSL的.
標頭檔
所有的標頭檔都放在event2目錄下.這些標頭檔大體可以分為3種:
API 標頭檔
一個API標頭檔定義了一些LIbevent的公用介面.這些標頭檔的名字不帶尾碼.
相容性標頭檔
相容性標頭檔定義了一些已經棄用的函數.除非你想將你的程式從舊版本的Libevent遷移過來,否則你不該使用這些標頭檔
結構體標頭檔
這些標頭檔定義了相對不穩定的組件的結構(These headers define structures with relatively volatile layouts).這些結構被暴露給你一是以防你需要快速地訪問該結構,還有一些是出於曆史原因.如果你的程式直接依賴於這些標頭檔中的結構,可能會導致你的程式與不同版本的Libevent有二進位相容性問題,並且很難調試.這些標頭檔有“_struct.h”的尾碼.
R0:前瞻