【Libevent】Libevent学习笔记(一):简介和安装
00. 目錄
文章目錄
- 00. 目錄
- 01. libevent簡介
- 02. Libevent的好處
- 03. Libevent的安裝和測試
- 04. Libevent成功案例
- 05. 參考資料
01. libevent簡介
什么是libevent
? Libevent 是一個用C語言編寫的、輕量級的開源高性能事件通知庫,主要有以下幾個亮點:事件驅動( event-driven),高性能;輕量級,專注于網絡,不如 ACE 那么臃腫龐大;源代碼相當精煉、易讀;跨平臺,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多種 I/O 多路復用技術, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定時器和信號等事件;注冊事件優先級。
? Chromium、Memcached、NTP、HTTPSQS等著名的開源程序都使用libevent庫,足見libevent的穩定。更多使用libevent的程序可以到libevent的官網查看。
libevent主要組成
? libevent包括事件管理、緩存管理、DNS、HTTP、緩存事件幾大部分。事件管理包括各種IO(socket)、定時器、信號等事件;緩存管理是指evbuffer功能;DNS是libevent提供的一個異步DNS查詢功能;HTTP是libevent的一個輕量級http實現,包括服務器和客戶端。libevent也支持ssl,這對于有安全需求的網絡程序非常的重要,但是其支持不是很完善,比如http server的實現就不支持ssl。
libevent核心實現
? Reactor(反應堆)模式是libevent的核心框架,libevent以事件驅動,自動觸發回調功能。之前介紹的epoll反應堆的源碼,就是從libevent中抽取出來的。
02. Libevent的好處
? 學習libevent有助于提升程序設計功力,除了網絡程序設計方面外,Libevent的代碼里有很多有用的設計技巧和基礎數據結構,比如信息隱藏、函數指針、c語言的多態支持、鏈表和堆等等,都有助于提升自己的C語言功底。
? 程序設計不止要了解框架,很多細節之處恰恰也是事關整個系統成敗的關鍵。只對libevent本身的框架大概了解,那或許僅僅是一知半解,不深入代碼分析,就難以了解其設計的精巧之處,也就難以為自己所用。
03. Libevent的安裝和測試
官方網站: http://libevent.org
源碼包下載:
-
- 1.4.x 系列,較為早期版本,適合源碼學習
-
- 2.x 系列,較新的版本,代碼量比1.4版本多很多,功能也更完善。
源碼包的安裝,以2.0.22版本為例,在官網可以下載到源碼包libevent-2.0.22-stable.tar.gz,基本安裝步驟與第三方庫源碼包安裝方式基本一致。
安裝步驟如下:
第一步: 解壓
deng@itcast:~$ tar -xvf libevent-2.0.22-stable.tar.gz
第二步: 進入到對應的目錄
deng@itcast:~$ cd libevent-2.0.22-stable/
第三步: 檢測環境, 生成Makefile
deng@itcast:~/libevent-2.0.22-stable$ ./configure
第四步: 編譯 生成動態庫和靜態庫
deng@itcast:~/libevent-2.0.22-stable$ make
第五步: 安裝 一定要使用管理員的權限
deng@itcast:~/libevent-2.0.22-stable$ sudo make install
第六步: 測試 執行hello-world
deng@itcast:~/libevent-2.0.22-stable$ cd sample/
deng@itcast:~/libevent-2.0.22-stable/sample$ pwd
/home/deng/libevent-2.0.22-stable/sample
deng@itcast:~/libevent-2.0.22-stable/sample$ ./hello-world
另外打開一個終端, 輸入如下命令
deng@itcast:~/libevent-2.0.22-stable/sample$ nc 192.168.73.44 9995
Hello, World!
如果出現你好, 世界! 說明軟件安裝ok…
庫所在目錄: /usr/local/lib
頭文件所在的目錄: /usr/local/include
04. Libevent成功案例
- Chromium - 谷歌的開源網絡瀏覽器(在Mac和Linux上使用Libevent)
- Memcached - 一種高性能的分布式內存對象緩存系統
- Transmission- 一個快速,簡單,免費的BitTorrent客戶端
- NTP - 使您的時鐘正確的網絡時間協議(在SNTP中使用Libevent)
- tmux - 一個干凈,現代,BSD許可的終端多路復用器,類似于GNU屏幕
- Tor - 一個匿名的互聯網通信系統。
- libevhtp - libevent的http客戶端/服務器API的快速而靈活的替代品
- Prosody - 用Lua編寫的Jabber / XMPP服務器
- PgBouncer - PostgreSQL的輕量級連接池
- redsocks - 一個簡單的透明TCP - > Socks5 / HTTPS代理守護進程。
- Crawl 一個小而高效的HTTP抓取工具
- Libio - 輸入/輸出抽象庫
- Honeyd - 一個虛擬的蜜網守護進程 - 可以用來對抗互聯網蠕蟲。
- Fragroute - IDS測試工具
- Nylon - 嵌套代理服務器
- Disconcert - 松散耦合工作站的分布式計算框架。
- watchcatd - 軟件看門狗,旨在采取不像通常的解決方案那樣激烈的行動,重置機器。
- ScanSSH - 快速SSH服務器和開放代理掃描程序。
- Nttlscan - Honeyd的網絡拓撲掃描儀。
- NetChat - netcat和ppp聊天的組合。
- Io - 一種小型編程語言; 使用libevent進行網絡通信。
- Systrace - 系統調用沙箱。
- SpyBye - 檢測網頁上的惡意軟件。
- GreenSQL - 一個SQL數據庫防火墻。
- dnsscan - 用于識別開放遞歸dns解析器的快速掃描器
- Kargo Event - libevent的PHP擴展。
- Scytale - 一種數據庫加密工具。
05. 參考資料
官方參考網站: https://www.monkey.org/~provos/libevent/doxygen-2.0.1/index.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的【Libevent】Libevent学习笔记(一):简介和安装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C语言】控制台窗口图形界面编程(七):
- 下一篇: 【Libevent】Libevent学习