Libevent參考手冊 前言

2022-05-06 11:54:12 字數 2595 閱讀 8368

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,除非是進行加密通訊。

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

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

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

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

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。

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

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

原文:html

晨星部落格:

老衣部落格:

libevent參考手冊9

譯自 本章描述bufferevent的一些對通常使用不必要的高階特徵。如果只想學習如何使用bufferevent,可以跳過這一章,直接閱讀下一章。有時候網路程式需要與自身通訊。比如說,通過某些協議對使用者連線進行隧道操作的程式,有時候也需要通過同樣的協議對自身的連線進行隧道操作。當然,可以通過開啟乙...

Libevent參考手冊(初步)

libevent 是用於編寫高速可移植非阻塞 io 應用的庫,其設計目標是 建立 libevent 時,預設安裝下列庫 某些平台上可能安裝下列庫 libevent 公用標頭檔案都安裝在 event2目錄中,分為三類 libevent 2.0以更合理的 不易出錯的方式修正了 api。如果可能,編寫新程...

cass參考手冊 CASS9 2參考手冊

釋放雙眼,帶上耳機,聽聽看 前 言 cass9.2參考手冊關於cass9.2 cass地形地藉成圖軟體是基於autocad平台技術的gis前端資料處理系統。廣泛應用於地形成圖 地藉成圖 工程測量應用 空間資料建庫 市政監管等領域,全面面向gis,徹底打通數碼化成圖系統與gis介面,使用骨架線實時編輯...