1. 程式人生 > 其它 >android4.0網路程式設計配書原始碼_Libevent 原始碼閱讀【1】概述

android4.0網路程式設計配書原始碼_Libevent 原始碼閱讀【1】概述

技術標籤:android4.0網路程式設計配書原始碼

57dd5deea8382471043f13729d1c0a49.png
本文旨在通過閱讀Libevent原始碼加深對網路程式設計的認識

存放我學習記錄的github, 歡迎star

Libevent原始碼閱讀+中文註釋(更新中)​github.com

Libevent 介紹

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高效能伺服器程式設計》