(三)libevent源文件結構

前言

在正式閱讀源碼之前,我們先對libevent的整體結構有大致的瞭解。這對我們在大體上了解libevent很有好處。

源文件結構

進入到libevent庫目錄裏面一看,好像還挺多的,不過除去腳本還有.lo.la這些用libtool編譯出來的目標文件以及庫文件,也沒剩多少了。

主要分爲事件頭文件、內部頭文件、事件主框架、對多種多路I/O複用的機制的封裝、信號管理方面、定時事件管理方面、緩衝區管理方面、日誌管理、基礎數據結構、測試代碼、Windows下的源文件、使用libevent實現的http服務器、使用libevent實現的dns查詢庫。大致就這些。

  • 事件頭文件:
    1. event.h:裏面定義了event結構體以及evbuffer結構體以及聲明瞭event.c中需要使用的接口以及evbuffer.c需要使用的接口還有部分時間以及信號管理需要的宏函數
    2. event-internal.h):定義了struct eventop結構體,以及struct event_base結構體。還聲明瞭一些接口。
  • 事件主框架(event.c):整個libevent的核心運行框架就在這裏面,裏面用到了其他各部分的接口及變量。
  • 多種多路I/O機制的封裝:
    1. select.c:封裝了select機制
    2. poll.c:封裝了poll機制
    3. epoll.c:封裝了epoll機制
    4. kqueue.c:封裝了kqueue機制(這個沒有了解過,貌似是在BSD系統上用的)
  • 信號管理:
    1. evsignal.h:定義了struct evsignal_info結構體,用於管理信號並聲明瞭信號管理部分需要的接口。
    2. evsignal.c:定義了各種信號管理需要的接口,如信號管理的初始化、註冊信號事件、刪除信號事件以及將信號添加到就緒事件中。
  • 定時事件管理:
    1. min_heap.h:libevent管理定時事件是以小根堆來管理的,以時間爲key,裏面定義了小根堆的結構以及一些操作。還有一些關於時間的在evutil.c中。
  • 緩衝區管理(evbuffer.cbuffer.c):管理緩衝區部分
  • 日誌管理(log.hlog.c):日誌管理部分
  • 輔助函數(evutil.hevutil.c):一些其他源文件會用到的輔助功能的函數
  • 基礎數據結構:在compat目錄下,queue.h裏面實現了一些常用的數據結構,如雙向鏈表、隊列等,_libevent_time.h:一些關於時間操作的代碼
  • 測試代碼:在testsample目錄下,可以用於檢測libevent庫是否裝好
  • Windows下的源文件:WIN32-CodeWIN32-Prj
  • 使用libevent實現的http服務器:主要是http.chttp-internal.h
  • 使用libevent實現的dns查詢庫:主要是evdns.cevdns.h
  • 使用libevent實現的rpc服務器(Remote Procedure Call Protocol):主要是evrpc.hevrpc.cevrpc-internal.h
  • 注意帶-internal.h的頭文件,裏面定義的一般都是libevent內部使用的成員及函數

大致順序

接下來我們閱讀源碼的大致順序是:

  1. 事件主框架
  2. 事件部分
  3. 事件主框架及主循環
  4. 信號部分
  5. 定時事件部分
  6. 時間管理
  7. libevent如何把多種I/O複用技術集合在一起
  8. 緩衝區管理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章