acl概述
acl (全稱Advanced C Library)是一個跨平臺(支持linux,WIN32,Solaris,macOS,F(xiàn)reeBSD)的網(wǎng)絡(luò)通信庫及服務(wù)器編程框架,同時提供更多的實(shí)用功能庫。用戶通過該庫可以非常容易地編寫支持多種模式(多線程、多進(jìn)程、非阻塞、觸發(fā)器、UDP方式、協(xié)程方式)的服務(wù)器程序,WEB 應(yīng)用程序,數(shù)據(jù)庫應(yīng)用程序。此外,該庫還提供了常見應(yīng)用的客戶端通信庫(如:HTTP、SMTP、ICMP、redis、memcache、beanstalk、handler socket),常見流式編解碼庫(如:XML/JSON/MIME/BASE64/UUCODE/QPCODE/RFC2047),常用數(shù)據(jù)結(jié)構(gòu)(hash、array、ring、fifo、二分查找、avl、線程池)。
acl庫組成
acl 工程主要包含 5 個庫及大量示例。5 個庫的說明如下:
- lib_acl: 該庫是最基礎(chǔ)的庫,其它 4 個庫均依賴于該庫; 該庫以 C 語言實(shí)現(xiàn)。
- lib_protocol: 該庫主要實(shí)現(xiàn)了 http 協(xié)議及 icmp/ping 協(xié)議; 該庫以 C 語言實(shí)現(xiàn)。
- lib_acl_cpp: 該庫用 C++ 語言封裝了 lib_acl/lib_protocol 兩個庫,同時增加了一些其它有價值的功能應(yīng)用。
- lib_fiber: 該庫為支持協(xié)程庫,直接 hook 系統(tǒng) read/write 等 API,與 epoll 配合支持高并發(fā)網(wǎng)絡(luò)編程。
- lib_dict: 該庫主要實(shí)現(xiàn)了 KEY-VALUE 的字典式存儲庫,該庫另外還依賴于 BDB, CDB 以及 tokyocabinet 庫。
- lib_tls: 該庫封裝了 openssl 庫,使 lib_acl 的通信模式可以支持 ssl。
平臺支持及編譯
整個工程目前支持 Linux(AS4,5,6, CS4,5,6, ubuntu), windows, MacOS, FreeBSD, Solaris,Android,IOS。
- Linux/UNIX: 編譯器為 gcc,直接在終端命令行方式下分別進(jìn)入 lib_acl/lib_protocol/lib_acl_cpp 目錄下,運(yùn)行 make 命令即可。
- Windows: 可以用 VC2003/VC2008/VC2010/VC2012/vc2013/vc2015 進(jìn)行編譯。
源碼目錄結(jié)構(gòu)
lib_acl
- init : 主要用于初始化 acl 基礎(chǔ)庫
- stdlib : 是一些比較基礎(chǔ)的功能函數(shù)庫,在 stdlib/ 根目錄下主要包括一些有關(guān)日志記錄、網(wǎng)絡(luò)/文件流處理、VSTRING緩沖操作等功能函數(shù);在 stdlib/ 下還有二級目錄,如下:
- common : 該目錄主要為一些常用的數(shù)據(jù)結(jié)構(gòu)及算法的功能函數(shù)庫,象哈希表、鏈表、隊列、動態(tài)數(shù)組、堆棧、緩存、平衡二叉樹、模式匹配樹等;
- memory : 該目錄主要包含與內(nèi)存操作相關(guān)的函數(shù)庫,象內(nèi)存基礎(chǔ)分配與校驗(yàn)、內(nèi)存池管理、內(nèi)存切片管理等;
- filedir : 該目錄主要包含與目錄遍歷、目錄創(chuàng)建等相關(guān)的庫;
- configure : 該目錄主要包含配置文件的分析庫;
- iostuff : 該目錄主要包含一些常用的IO操作的函數(shù)庫,象讀/寫超時、設(shè)置IO句柄的阻塞模式等;
- string : 該目錄主要包含一些常用的字符串操作的庫,提供了比標(biāo)準(zhǔn)C更靈活高效的字符串操作功能;
- debug : 主要用于協(xié)助調(diào)試內(nèi)存的泄露等功能;
- sys : 主要是與不同操作系統(tǒng)平臺相關(guān)的API的封裝函數(shù)庫;
- net: 是與網(wǎng)絡(luò)操作相關(guān)的函數(shù)庫,包含網(wǎng)絡(luò)監(jiān)聽、網(wǎng)絡(luò)連接、DNS查詢、套接口參數(shù)設(shè)置等功能;
- connect : 主要是與網(wǎng)絡(luò)連接相關(guān)的函數(shù)庫,包含網(wǎng)絡(luò)連接、域套接口連接等;
- listen : 主要是與網(wǎng)絡(luò)監(jiān)聽相關(guān)的函數(shù)庫,包含網(wǎng)絡(luò)監(jiān)聽、域套接口監(jiān)聽等;
- dns : 主要是與DNS域名查詢相關(guān)的函數(shù)庫,包含對 gethostbyname 等接口的封裝、按RFC1035標(biāo)準(zhǔn)直接發(fā)送UDP包方式進(jìn)行查詢等功能;
- event : 主要封裝了 select/poll/epoll/iocp/win message/kqueue/devpoll 等系統(tǒng)API接口,使處理網(wǎng)絡(luò)事件更加靈活、高效、簡單,另外還包含定時器接口,acl 中的很多網(wǎng)絡(luò)應(yīng)用都會用到這些接口,象 aio、master 等模塊;
- aio : 主要包含網(wǎng)絡(luò)異步操作的功能函數(shù),該套函數(shù)庫在處理高并發(fā)時有非常高的效率,而且提供了比基礎(chǔ)API更為高級的調(diào)用方式,比使用象 libevent 之類的函數(shù)庫更為簡單,而且是線程安全的;
- msg : 主要包含了基于線程的消息事件及基于網(wǎng)絡(luò)的消息事件功能;
- thread : 主要是封裝了各個OS平臺下的基礎(chǔ)線程API,使對外接口保持一致性,消除了平臺的差異性,同時還提供了半駐留線程池的函數(shù)庫,以及對于線程局部變量的擴(kuò)展;
- db : 主要是一些與數(shù)據(jù)庫有關(guān)的功能庫,定義了一個通用的數(shù)據(jù)庫連接池的框架(并且實(shí)現(xiàn)了MySQL的連接池實(shí)例);一個簡單的內(nèi)存數(shù)據(jù)庫(由哈希表、鏈表、平衡二叉樹組合而成);ZDB數(shù)據(jù)存儲引擎,這是一個高效的基于數(shù)字鍵的存儲引擎;
- proctl : win32 平臺下父子進(jìn)程控制功能庫;
- code : 常見編碼函數(shù)庫,包括 base64編解碼、URL編解碼以及一些漢字字符集編碼等;
- unit_test : 包含有關(guān)進(jìn)行 C 語言單元測試的功能庫;
- xml: 是一個流式的 xml 解析器及構(gòu)造器,可以支持阻塞及阻塞式網(wǎng)絡(luò)通信;
- json: 是一個流式的 json 解析器及構(gòu)造器,可以支持阻塞及阻塞式網(wǎng)絡(luò)通信;
- master: 是在 UNIX 環(huán)境下支持多種服務(wù)器模式的服務(wù)器框架,目前主要支持多進(jìn)程模式、多進(jìn)程多線程模式、多進(jìn)程非阻塞模式、多進(jìn)程觸發(fā)器模式及 UDP 通信模式;
lib_protocol
- http: HTTP 協(xié)議相關(guān)的庫,支持 HTTP/1.1,通訊方式支持同步/異步方式
- icmp: icmp/ping 協(xié)議庫,支持同步/異步通信方式
- smtp: 郵件客戶端發(fā)信協(xié)議庫
lib_fiber
- c 目錄:該目錄下主要為 C 語言版本實(shí)現(xiàn)的網(wǎng)絡(luò)協(xié)程庫,其中包含源文件及頭文件
- cpp 目錄:該目錄下封裝了 C 語言版本的網(wǎng)絡(luò)協(xié)程庫
- samples 目錄:該目錄下有大量的使用協(xié)程庫編程的例子
samples
- lib_acl/samples:該目錄下的程序主要是基于 lib_acl 及 lib_protocol 庫的示例
- lib_acl_cpp/samples:該目錄下的程序主要是基于 lib_acl_cpp 庫的示例






