libevent 介紹

# libevent 2.0html

介紹

libevent是一個用於開發可擴展性網絡服務器的基於事件驅動模型的網絡庫. libevent具備幾個顯著亮點:git

  • 事件驅動,高性能
  • 輕量級,專一於網絡
  • 跨平臺,支持Windows, Linux, Mac OS等
  • 支持多種I/O多路複用技術,epoll, poll, dev/poll, select和kqueue等
  • 支持I/O,定時器和信號等事件
  • 註冊事件優先級

libevent是爲了取代在事件驅動的網絡服務器的事件循環.應用程序只須要調用event_dispatch()而後動態的添加和刪除事件而不須要改變事件循環. libevent已經被普遍的應用,做爲底層網絡庫;好比Memcached, Vomit, NetChat,Chromium等github

標準用法

每個使用libevent的應用程序必須包含<event2/event.h>頭文件,並經過連接器鏈接-levent.(相反的若是你只想連接主要的event或者基礎的I/O緩衝區管理代碼,不想連接其餘的代碼協議,可使用-levent_code)windows

庫設置

在你調用libevent庫中其餘函數以前,你首先須要設置庫。若是你想在多線程應用程序中使用libevent,你須要初始化線程支持,經過使用evthread_use_pthreads()或者evthread_use_windows_threads().你能夠查看<event2/thread.h>瞭解更多的信息. 另外一點,你可使用event_set_mem_functions取代libevent的內存管理,使用event_enable_debug_mode()函數打開調試模式.服務器

建立一個event base

接下來,你須要建立一個event_base結構,使用event_base_new()或者event_base_new_with_config().event_base的責任是保持跟蹤哪個event時間是即將發生的(換句話說,觀察哪個會成爲活動的)和哪些事件是活動的。每個事件都和單個evnet_base相關.網絡

事件通知

你想監視每個文件描述符,你必須建立一個event結構經過event_new()函數.(你也能夠調用event_assign()函數聲明一個event結構去初始化結構裏面的成員.)啓動通知,你要經過event_add()添加結構加入到監控事件列表.事件列表必須一直保留在活動的狀況下,而且它應該是在堆上分配.數據結構

調度事件

最後,你要調用event_dispatch()去循環調度事件.你也可使用event_base_loop()達到更精細的控制。多線程

目前,只有一個線程能夠被一個給定的event_base調度一次。若是你想同時運行事件在多線程中,你也能夠有一個單一的event_base,把那些事件添加到一個工做隊列,或者你能夠建立多個event_base 對象.框架

I/O緩衝區

libevent在上層提供一個按期事件回調的抽象,這個抽象被稱做緩衝事件.一個緩衝事件提供輸入和輸出緩衝區,可以自動的填充和取出.一個使用的緩衝事件用戶再也不直接的進行I/O操做,而是經過從輸入緩衝區中讀取,寫入到輸出緩衝區.異步

一旦初始化經過bufferevent_socket_new(),bufferevent結構的bufferevent_enable()bufferevent_disable()會被反覆使用.經過調用bufferevent_read()bufferevent_write()而取代直接的讀寫socket.

當被容許讀時,bufferevent將試圖讀取文件描述符和調用讀的回調函數.寫回調被執行時,輸出緩衝區寫到臨界時,將默認返回0.

查看<event2/bufferevent*.h>得到更多的信息

定時器

libevent 能夠建立定時器來喚醒一個已經通過必定時間已通過期的回調(callback).evtime_new()函數返回一個事件結構做爲一個定時器.調用evtime_add()來激活一個定時器.定時器經過調用evtimer_del()停用定時器.

異步DNS解析

libevent剔紅一個異步DNS解析器,它能夠取代標準的DNS解析器功能。

更詳細的查看<event2/dns.h>

事件驅動的HTTP服務器

libevent提供一個很是簡單的事件驅動HTTP服務,能夠嵌入你的程序用來提供HTTP服務請求.

使用這些特性,你須要包含<event2/http.h>頭文件.查看這個頭文件瞭解更多的信息。

一個RPC服務端和客戶端框架

libevent 提供一個框架來建立服務端和客戶端.它負責封裝和拆解全部的數據結構。

API 接口

能夠點擊下面的連接,瀏覽完整的libevebt API文檔

event2/event.h libevent 的主要頭文件

event2/thread.h多線程程序使用的函數

event2/buffer.hevent2/bufferevent.h緩衝區管理和網絡讀寫

event2/util.h實用的功能的無阻塞網絡代碼

event2/dns.h異步DNS解析

event2/http.h一個基於libevent的嵌入HTTP 服務器

event2/rpc.h一個建立RPC服務端和客戶端的框架


*部分原文連接地址*若有描述翻譯問題,歡迎糾正,並pull request或郵件mjrao@foxmail.com

github原文,翻譯若有出處,歡迎pull request指正

相關文章
相關標籤/搜索