android4.0網路程式設計配書原始碼_Libevent 原始碼閱讀【1】概述
阿新 • • 發佈:2021-01-09
本文旨在通過閱讀Libevent原始碼加深對網路程式設計的認識
存放我學習記錄的github, 歡迎star
Libevent原始碼閱讀+中文註釋(更新中)github.comLibevent 介紹
Libevent 是一個用c語言編寫的、輕量級的開源高效能事件通知庫,主要有以下幾個亮點:事件驅動( event-driven),高效能;輕量級,專注於網路,不如 ACE 那麼臃腫龐大;原始碼相當精煉、易讀;跨平臺,支援 Windows、 Linux、 *BSD 和 Mac Os;支援多種 I/O 多路複用技術, epoll、 poll、 dev/poll、 select 和 kqueue 等;支援 I/O,定時器和訊號等事件;註冊事件優先順序.
為什麼選擇閱讀Libevent原始碼
一是在遊雙的《Linux高效能伺服器程式設計》中介紹了對於Libevent的相關內容產生了興趣, 二也是想為自己吸收優秀網路庫的思想, 提升自己的網路程式設計的能力, 夯實基礎
Libevent原始碼目錄結構
Libevent原始碼直接搜github便有 傳送門
原始碼目錄
我的github刪除對用於編譯(比如cmake之類的)的檔案和資料夾, 因為重點是對Libevent資料結構和演算法相關設計的瞭解
// libevent 2.1.12 // * 代表核心原始碼 . ├── README.md ├── arc4random.c ├── buffer.c // buffer*.c 緩衝區相關函式 ├── buffer_iocp.c ├── bufferevent-internal.h ├── bufferevent.c ├── bufferevent_async.c ├── bufferevent_filter.c ├── bufferevent_mbedtls.c ├── bufferevent_openssl.c ├── bufferevent_pair.c ├── bufferevent_ratelim.c ├── bufferevent_sock.c ├── bufferevent_ssl.c ├── changelist-internal.h ├── compat │ └── sys │ └── queue.h // 通用資料結構 ├── defer-internal.h ├── demo // 存放我的一些使用示例 │ ... ├── devpoll.c // /dev/poll ├── epoll.c // I/O複用: epoll ├── epoll_sub.c ├── epolltable-internal.h ├── evbuffer-internal.h ├── evconfig-private.h.in ├── evdns.c // DNS協議相關函式 ├── * event-internal.h ├── * event.c // 核心程式碼 ├── event_iocp.c ├── event_tagging.c // 新增和讀取緩衝區中標記資料 ├── evmap-internal.h ├── * evmap.c // 維護控制代碼和處理器的關係 ├── evport.c // I/O複用events poll ├── evrpc-internal.h ├── evrpc.c ├── evsignal-internal.h // evthread*.c 支援執行緒相關函式 ├── evthread-internal.h ├── evthread.c ├── evthread_pthread.c ├── evthread_win32.c ├── evutil.c ├── evutil_rand.c ├── evutil_time.c ├── file-structure.txt ├── ht-internal.h ├── http-internal.h ├── http.c // http協議相關支援 ├── include │ ├── evdns.h │ ├── event.h │ ├── event2 // libevent 主要標頭檔案目錄 │ │ ├── buffer.h │ │ ├── buffer_compat.h │ │ ├── bufferevent.h │ │ ├── bufferevent_compat.h │ │ ├── bufferevent_ssl.h │ │ ├── bufferevent_struct.h │ │ ├── dns.h │ │ ├── dns_compat.h │ │ ├── dns_struct.h │ │ ├── event.h // 核心函式 │ │ ├── event_compat.h │ │ ├── * event_struct.h │ │ ├── http.h // HTTP協議相關函式 │ │ ├── http_compat.h │ │ ├── http_struct.h │ │ ├── keyvalq_struct.h │ │ ├── listener.h // 封裝socket相關操作 │ │ ├── rpc.h │ │ ├── rpc_compat.h │ │ ├── rpc_struct.h │ │ ├── tag.h │ │ ├── tag_compat.h │ │ ├── thread.h │ │ ├── util.h │ │ ├── visibility.h │ │ └── watch.h │ ├── evhttp.h │ ├── evrpc.h // RPC協議相關支援 │ ├── evutil.h │ └── include.am ├── iocp-internal.h ├── ipv6-internal.h ├── kqueue-internal.h ├── kqueue.c // I/O複用: kqueue ├── listener.c ├── log-internal.h ├── log.c // 日誌相關函式 ├── mbedtls-compat.h ├── minheap-internal.h // 時間堆實現 ├── mm-internal.h ├── openssl-compat.h ├── poll.c // poll ├── ratelim-internal.h ├── sample // 示例程式碼 │ ├── becat.c │ ... ├── select.c // POSIX select ├── signal.c // 訊號相關函式 ├── ssl-compat.h ├── strlcpy-internal.h ├── strlcpy.c ├── test // 測試程式碼 │ ├── bench.c │ ... ├── time-internal.h ├── util-internal.h ├── watch.c ├── wepoll.c ├── wepoll.h └── win32select.c // windows select 7 directories, 168 files
對於整個原始碼, event-internal.h, include/event2/event_struct.h, event.c, evmap.c最為重要, 定義了核心資料結構event和event_structure和相關操作
小結
介紹了libevent和其主要原始碼的目錄結構
參考
[1] 遊雙《Linux高效能伺服器程式設計》