跨平臺的C語言網絡框架庫acl

acl概述

acl (全稱Advanced C Library)是一個跨平臺(支持LINUX,WIN32,Solaris,MacOS,FreeBSD)的網絡通信庫及服務器編程框架,同時提供更多的實用功能庫。用戶通過該庫可以非常容易地編寫支持多種模式(多線程、多進程、非阻塞、觸發器、UDP方式、協程方式)的服務器程序,WEB 應用程序,數據庫應用程序。此外,該庫還提供了常見應用的客戶端通信庫(如:HTTP、SMTP、ICMP、redis、memcache、beanstalk、handler socket),常見流式編解碼庫(如:XML/JSON/MIME/BASE64/UUCODE/QPCODE/RFC2047),常用數據結構(hash、array、ring、fifo、二分查找、avl、線程池)。

acl庫組成

acl 工程主要包含 5 個庫及大量示例。5 個庫的說明如下:

  • lib_acl: 該庫是最基礎的庫,其它 4 個庫均依賴於該庫; 該庫以 C 語言實現。
  • lib_protocol: 該庫主要實現了 http 協議及 icmp/ping 協議; 該庫以 C 語言實現。
  • lib_acl_cpp: 該庫用 C++ 語言封裝了 lib_acl/lib_protocol 兩個庫,同時增加了一些其它有價值的功能應用。
  • lib_fiber: 該庫為支持協程庫,直接 hook 系統 read/write 等 API,與 epoll 配合支持高併發網絡編程。
  • lib_dict: 該庫主要實現了 KEY-VALUE 的字典式存儲庫,該庫另外還依賴於 BDB, CDB 以及 tokyocabinet 庫。
  • lib_tls: 該庫封裝了 openssl 庫,使 lib_acl 的通信模式可以支持 ssl。
跨平臺的C語言網絡框架庫acl

平臺支持及編譯

整個工程目前支持 Linux(AS4,5,6, CS4,5,6, ubuntu), Windows, MacOS, FreeBSD, Solaris,Android,IOS。

  • Linux/UNIX: 編譯器為 gcc,直接在終端命令行方式下分別進入 lib_acl/lib_protocol/lib_acl_cpp 目錄下,運行 make 命令即可。
  • Windows: 可以用 VC2003/VC2008/VC2010/VC2012/vc2013/vc2015 進行編譯。

源碼目錄結構

lib_acl

  1. init : 主要用於初始化 acl 基礎庫
  2. stdlib : 是一些比較基礎的功能函數庫,在 stdlib/ 根目錄下主要包括一些有關日誌記錄、網絡/文件流處理、VSTRING緩衝操作等功能函數;在 stdlib/ 下還有二級目錄,如下:
  3. common : 該目錄主要為一些常用的數據結構及算法的功能函數庫,象哈希表、鏈表、隊列、動態數組、堆棧、緩存、平衡二叉樹、模式匹配樹等;
  4. memory : 該目錄主要包含與內存操作相關的函數庫,象內存基礎分配與校驗、內存池管理、內存切片管理等;
  5. filedir : 該目錄主要包含與目錄遍歷、目錄創建等相關的庫;
  6. configure : 該目錄主要包含配置文件的分析庫;
  7. iostuff : 該目錄主要包含一些常用的IO操作的函數庫,象讀/寫超時、設置IO句柄的阻塞模式等;
  8. string : 該目錄主要包含一些常用的字符串操作的庫,提供了比標準C更靈活高效的字符串操作功能;
  9. debug : 主要用於協助調試內存的洩露等功能;
  10. sys : 主要是與不同操作系統平臺相關的API的封裝函數庫;
  11. net: 是與網絡操作相關的函數庫,包含網絡監聽、網絡連接、DNS查詢、套接口參數設置等功能;
  12. connect : 主要是與網絡連接相關的函數庫,包含網絡連接、域套接口連接等;
  13. listen : 主要是與網絡監聽相關的函數庫,包含網絡監聽、域套接口監聽等;
  14. dns : 主要是與DNS域名查詢相關的函數庫,包含對 gethostbyname 等接口的封裝、按RFC1035標準直接發送UDP包方式進行查詢等功能;
  15. event : 主要封裝了 select/poll/epoll/iocp/win message/kqueue/devpoll 等系統API接口,使處理網絡事件更加靈活、高效、簡單,另外還包含定時器接口,acl 中的很多網絡應用都會用到這些接口,象 aio、master 等模塊;
  16. aio : 主要包含網絡異步操作的功能函數,該套函數庫在處理高併發時有非常高的效率,而且提供了比基礎API更為高級的調用方式,比使用象 libevent 之類的函數庫更為簡單,而且是線程安全的;
  17. msg : 主要包含了基於線程的消息事件及基於網絡的消息事件功能;
  18. thread : 主要是封裝了各個OS平臺下的基礎線程API,使對外接口保持一致性,消除了平臺的差異性,同時還提供了半駐留線程池的函數庫,以及對於線程局部變量的擴展;
  19. db : 主要是一些與數據庫有關的功能庫,定義了一個通用的數據庫連接池的框架(並且實現了mysql的連接池實例);一個簡單的內存數據庫(由哈希表、鏈表、平衡二叉樹組合而成);ZDB數據存儲引擎,這是一個高效的基於數字鍵的存儲引擎;
  20. proctl : win32 平臺下父子進程控制功能庫;
  21. code : 常見編碼函數庫,包括 base64編解碼、URL編解碼以及一些漢字字符集編碼等;
  22. unit_test : 包含有關進行 C 語言單元測試的功能庫;
  23. xml: 是一個流式的 xml 解析器及構造器,可以支持阻塞及阻塞式網絡通信;
  24. json: 是一個流式的 json 解析器及構造器,可以支持阻塞及阻塞式網絡通信;
  25. master: 是在 UNIX 環境下支持多種服務器模式的服務器框架,目前主要支持多進程模式、多進程多線程模式、多進程非阻塞模式、多進程觸發器模式及 UDP 通信模式;

lib_protocol

  1. http: HTTP 協議相關的庫,支持 HTTP/1.1,通訊方式支持同步/異步方式
  2. icmp: icmp/ping 協議庫,支持同步/異步通信方式
  3. smtp: 郵件客戶端發信協議庫

lib_fiber

  1. c 目錄:該目錄下主要為 C 語言版本實現的網絡協程庫,其中包含源文件及頭文件
  2. cpp 目錄:該目錄下封裝了 C 語言版本的網絡協程庫
  3. samples 目錄:該目錄下有大量的使用協程庫編程的例子

samples

  1. lib_acl/samples:該目錄下的程序主要是基於 lib_acl 及 lib_protocol 庫的示例
  2. lib_acl_cpp/samples:該目錄下的程序主要是基於 lib_acl_cpp 庫的示例


分享到:


相關文章: