1. 程式人生 > >翻譯:Libevent參考手冊:前言 (二) (轉)

翻譯:Libevent參考手冊:前言 (二) (轉)

 從一萬英尺外看Libevent

Libevent是用於編寫高速可移植非阻塞IO應用的庫,其設計目標是:

v 可移植性:使用libevent編寫的程式應該可以在libevent支援的所有平臺上工作。即使沒有好的方式進行非阻塞IO,libevent也應該支援一般的方式,讓程式可以在受限的環境中執行。

v 速度:libevent嘗試使用每個平臺上最高速的非阻塞IO實現,並且不引入太多的額外開銷。

v 可擴充套件性:libevent被設計為程式即使需要上萬個活動套接字的時候也可以良好工作。

v 方便:無論何時,最自然的使用libevent編寫程式的方式應該是穩定的、可移植的。

libevent由下列元件構成:

v evutil:用於抽象不同平臺網路實現差異的通用功能。

v event和event_base:libevent的核心,為各種平臺特定的、基於事件的非阻塞IO後端提供抽象API,讓程式可以知道套接字何時已經準備好,可以讀或者寫,並且處理基本的超時功能,檢測OS訊號。

v bufferevent:為libevent基於事件的核心提供使用更方便的封裝。除了通知程式套接字已經準備好讀寫之外,還讓程式可以請求緩衝的讀寫操作,可以知道何時IO已經真正發生。(bufferevent介面有多個後端,可以採用系統能夠提供的更快的非阻塞IO方式,如Windows中的IOCP。)

v evbuffer:在bufferevent層之下實現了緩衝功能,並且提供了方便有效的訪問函式。

v evhttp:一個簡單的HTTP客戶端/伺服器實現。

v evdns:一個簡單的DNS客戶端/伺服器實現。

v evrpc:一個簡單的RPC實現。

 庫

建立libevent時,預設安裝下列庫:

v libevent_core:所有核心的事件和緩衝功能,包含了所有的event_base、evbuffer、bufferevent和工具函式。

v libevent_extra:定義了程式可能需要,也可能不需要的協議特定功能,包括HTTP、DNS和RPC。

v libevent:這個庫因為歷史原因而存在,它包含libevent_core和libevent_extra的內容。不應該使用這個庫,未來版本的libevent可能去掉這個庫。

某些平臺上可能安裝下列庫:

v libevent_pthreads:新增基於pthread可移植執行緒庫的執行緒和鎖定實現。它獨立於libevent_core,這樣程式使用libevent時就不需要連結到pthread,除非是以多執行緒方式使用libevent。

v libevent_openssl:這個庫為使用bufferevent和OpenSSL進行加密的通訊提供支援。它獨立於libevent_core,這樣程式使用libevent時就不需要連結到OpenSSL,除非是進行加密通訊。

3 標頭檔案

libevent公用標頭檔案都安裝在event2目錄中,分為三類:

v API標頭檔案:定義libevent公用介面。這類標頭檔案沒有特定字尾。

v 相容標頭檔案:為已廢棄的函式提供相容的頭部包含定義。不應該使用這類標頭檔案,除非是在移植使用較老版本libevent的程式時。

v 結構標頭檔案:這類標頭檔案以相對不穩定的佈局定義各種結構體。這些結構體中的一些是為了提供快速訪問而暴露;一些是因為歷史原因而暴露。直接依賴這類標頭檔案中的任何結構體都會破壞程式對其他版本libevent的二進位制相容性,有時候是以非常難以除錯的方式出現。這類標頭檔案具有後綴“_struct.h”。

(還存在不在event2目錄中的較老版本libevent的標頭檔案,請參考下節:如果需要使用老版本libevent)

4 如果需要使用老版本libevent

libevent 2.0以更合理的、不易出錯的方式修正了API。如果可能,編寫新程式時應該使用libevent 2.0。但是有時候可能需要使用較老的API,例如在升級已存的應用時,或者支援因為某些原因不能安裝2.0或者更新版本libevent的環境時。

較老版本的libevent標頭檔案較少,也不安裝在event2目錄中。

在2.0以及以後版本的libevent中,老的標頭檔案仍然會作為新標頭檔案的封裝而存在。

其他關於使用較老版本的提示:

v 1.4版之前只有一個庫libevent,它包含現在分散到libevent_core和libevent_extra中的所有功能。

v 2.0版之前不支援鎖定:只有確定不同時在多個執行緒中使用同一個結構體時,libevent才是執行緒安全的。

下面的節還將討論特定程式碼區域可能遇到的已經廢棄的API。

5 關於版本狀態的提示

1.4.7及以前版本應該被認為是完全廢棄的。1.3之前的版本應該被認為是充滿bug的。

(此外,不要向libevent維護者傳送任何關於1.4.x或者更早版本的新特徵,這些版本被認為是穩定的釋出版本。如果在1.3x或者更早版本中發現bug,在報告之前請確定在最新的穩定釋出版本中問題仍然存在:後續釋出可能已經解決了問題。)