Libevent:1前言

一:libevent概述:html

        libevent是一個用來編寫快速、可移植、非阻塞IO程序的庫,它的設計目標是:可移植性、高效、可擴展性、便捷。windows

 

        libevent包含下列組件:後端

        evutil:對不一樣平臺下的網絡實現的差別進行抽象;緩存

        event、event_base:libevent的核心。爲各類平臺特定的、基於事件的非阻塞IO後端提供抽象API,讓程序能夠知道套接字什麼時候已經準備好讀或寫,而且處理基本的超時功能,檢測OS信號。安全

        bufferevent:爲libevent基於事件的核心提供更方便的封裝。可使你的程序請求緩存的讀和寫,讓你知道什麼時候真正的發生IO,而不是在sockets準備好時通知你。(bufferevent接口擁有多個後端,這樣能夠有效的利用系統提供的更高速的非阻塞IO方式,好比windows的IOCPAPI。)服務器

        evbuffer:在bufferevent層之下實現了緩衝功能,而且提供了方便有效的訪問函數。網絡

        evhttp:一個簡單的HTTP客戶端/服務器實現。多線程

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

        evrpc:一個簡單的RPC實現。函數

 

二:庫

        當構件libevent時,默認狀況下,它會安裝下面的庫:

        libevent_core:包含全部核心的事件和緩存功能。該庫包含了全部的event_base, evbuffer, bufferevent和其餘功能函數。        

         libevent_extra:該庫定義了特定協議的功能,好比HTTP,DNS和RPC。
         libevent:該庫只因歷史緣由而存在;他包含了libevent_core 和libevent_extra的內容。該庫不該該在使用;它將會在將來的libevent刪除。

 

        下面的庫只會在某些平臺上安裝:

        libevent_pthreads:該庫基於可移植線程庫pthreads,增長了線程和鎖的實現機制。它獨立於libevent_core,所以,除非你要在多線程中使用libevent,不然不須要鏈接pthreads庫。        

        libevent_openssl:這個庫爲使用bufferevent和OpenSSL進行加密的通訊提供支持。它獨立於libevent_core,所以,除非你確實須要加密通訊,不然不須要鏈接OpenSSL庫。

 

三:頭文件

        目前,全部的libevent頭文件都安裝在event2目錄下。頭文件分爲三類:

        API頭文件:定義libevent的共用接口。這些頭文件沒有特定後綴。

        兼容頭文件:包含那些不推薦使用的函數的定義。除非使用較老版本的libevent,不然不須要包含這種頭文件。

        結構頭文件:這類頭文件以相對不穩定的佈局定義各類結構體。這些結構體中的一些是爲了提供快速訪問而暴露;一些是由於歷史緣由而暴露。直接依賴這類頭文件中的任何結構體都會破壞程序對其餘版本libevent的二進制兼容性,有時候是以很是難以調試的方式出現。這類頭文件具備後綴「_struct.h」。

        (還存在不在event2目錄中的較老版本libevent的頭文件,請參考下節:使用老版本libevent)

 

四:使用老版本Libevent

        Libevent 2.0已經通過修訂,使其更加合理和健壯,若是可能的話,應該使用Libevent2.0的API。可是某些時候,你可能不得不使用老版本的API。

        老版本的Libevent的頭文件較少,並且沒有安裝在event2目錄下:

OLD HEADER…

…REPLACED BY CURRENT HEADERS

event.h

event2/event*.h, event2/buffer*.h event2/bufferevent*.h event2/tag*.h

evdns.h

event2/dns*.h

evhttp.h

event2/http*.h

evrpc.h

event2/rpc*.h

evutil.h

event2/util*.h

        在2.0以及之後版本的libevent中,老的頭文件仍然會做爲新頭文件的封裝而存在。

 

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

        1.4版以前只有一個庫libevent,它包含如今分散到libevent_core和libevent_extra中的全部功能。

        2.0版以前不支持鎖:只有肯定不一樣時在多個線程中使用同一個結構體時,libevent纔是線程安全的。

 

原文:http://www.wangafu.net/~nickm/libevent-book/Ref0_meta.html

參考:http://blog.csdn.net/laoyi_grace/article/details/6534202

相關文章
相關標籤/搜索