跨平臺的通用網絡通信庫:acl 框架庫簡介

jopen 10年前發布 | 30K 次閱讀 網絡通信 網絡工具包

 一、概述

    acl 工程是一個跨平臺的通用網絡通信庫,同時提供更多的其它有價值功能。通過該庫,用戶可以非常容易地編寫支持多種模式的服務器程序、WEB 應用程序以及數據庫應用程序。此外,該庫還提供了 XML/JSON/MIME 編碼及解碼功能,這些編碼解碼庫均支持流式解析模式,從而使之更適應不同的網絡通訊方式。

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

    1) lib_acl: 該庫是最基礎的庫,其它 4 個庫均依賴于該庫; 該庫以 C 語言實現。

    2) lib_protocol: 該庫主要實現了 http 協議及 icmp/ping 協議; 該庫以 C 語言實現。

    3) lib_acl_cpp: 該庫用 C++ 語言封裝了 lib_acl/lib_protocol 兩個庫,同時增加了一些其它有價值的功能應用。

    4) lib_dict: 該庫主要實現了 KEY-VALUE 的字典式存儲庫,該庫另外還依賴于 BDB, CDB 以及 tokyocabinet 庫。

    5) lib_tls: 該庫封裝了 openssl 庫,使 lib_acl 的通信模式可以支持 ssl。

 

二、平臺支持及編譯

    整個工程目前支持 Linux(AS4,5,6, CS4,5,6), Windows, MacOS, (原本也支持 FreeBSD, Solaris, 現在如果誰有這些環境,可以輕松移植到這些平臺上)。

    1) Linux/MacOS: 直接在終端命令行方式下分別進入 lib_acl/lib_protocol/lib_acl_cpp/lib_dict/lib_tls 目錄下,運行 make 命令即可。

    2) Windows: 可以用 VC2003/VC2010/vc2012 進行編譯。(如果您需要用 VC6/VC2005/VC2008 編譯,可以參考 VC2003 的編譯條件)。

    當在 WIN32 環境下使用動態庫時有幾點需要注意:

    a) 使用 lib_acl 的動態庫時,需要在用戶的工程預定義: ACL_DLL;

    b) 使用 lib_protocol 動態庫中的 HTTP 庫或 ICMP 庫時,需要在工程中預定義 HTTP_DLL 、SMTP_DLL或 ICMP_DLL;

    c) 使用 lib_acl_cpp 的動態庫時,需要在工程中預定義 ACL_CPP_DLL,如果您使用用 VC2003 編譯環境則還需要預定義 VC2003;

    d) 使用 lib_dict 的動態庫時,需要在工程中預定義 DICT_DLL;

    e) 使用 lib_tls 的動態庫時,需要在工程中預定義 TLS_DLL。

 

三、本工程目錄結構說明

    1) lib_acl

    1.1 init:主要用于初始化 acl 基礎庫

    1.2 stdlib:是一些比較基礎的功能函數庫,在 stdlib/ 根目錄下主要包括一些有關日志記錄、網絡/文件流處理、VSTRING緩沖操作等功能函數;在 stdlib/ 下還有二級目錄,如下:

    1.2.1 common:該目錄主要為一些常用的數據結構及算法的功能函數庫,象哈希表、鏈表、隊列、動態數組、堆棧、緩存、平衡二叉樹、模式匹配樹等;

    1.2.2 memory:該目錄主要包含與內存操作相關的函數庫,象內存基礎分配與校驗、內存池管理、內存切片管理等;

    1.2.3 filedir:該目錄主要包含與目錄遍歷、目錄創建等相關的庫;

    1.2.4 configure:該目錄主要包含配置文件的分析庫;

    1.2.5 iostuff:該目錄主要包含一些常用的IO操作的函數庫,象讀/寫超時、設置IO句柄的阻塞模式等;

    1.2.6 string:該目錄主要包含一些常用的字符串操作的庫,提供了比標準C更靈活高效的字符串操作功能;

    1.2.7 debug:主要用于協助調試內存的泄露等功能;

    1.2.8 sys:主要是與不同操作系統平臺相關的API的封裝函數庫;

    1.3 net:是與網絡操作相關的函數庫,包含網絡監聽、網絡連接、DNS查詢、套接口參數設置等功能;

    1.3.1 connect:主要是與網絡連接相關的函數庫,包含網絡連接、域套接口連接等;

    1.3.2 listen:主要是與網絡監聽相關的函數庫,包含網絡監聽、域套接口監聽等;

    1.3.3 dns:主要是與DNS域名查詢相關的函數庫,包含對 gethostbyname 等接口的封裝、按RFC1035標準直接發送UDP包方式進行查詢等功能;

    1.4 event:主要封裝了 select/poll/epoll/iocp/win message/kqueue/devpoll 等系統API接口,使處理網絡事件更加靈活、高效、簡單,另外還包含定時器接口,acl 中的很多網絡應用都會用到這些接口,象 aio、master 等模塊;

    1.5 aio:主要包含網絡異步操作的功能函數,該套函數庫在處理高并發時有非常高的效率,而且提供了比基礎API更為高級的調用方式,比使用象 libevent 之類的函數庫更為簡單,而且是線程安全的;

    1.6 msg:主要包含了基于線程的消息事件及基于網絡的消息事件功能;

    1.7 thread:主要是封裝了各個OS平臺下的基礎線程API,使對外接口保持一致性,消除了平臺的差異性,同時還提供了半駐留線程池的函數庫,以及對于線程局部變量的擴展;

    1.8 db:主要是一些與數據庫有關的功能庫,定義了一個通用的數據庫連接池的框架(并且實現了mysql的連接池實例);一個簡單的內存數據庫(由哈希表、鏈表、平衡二叉樹組合而成);ZDB數據存儲引擎,這是一個高效的基于數字鍵的存儲引擎;

    1.9 proctl:win32 平臺下父子進程控制功能庫;

    1.10 code:常見編碼函數庫,包括 base64編解碼、URL編解碼以及一些漢字字符集編碼等;

    1.11 unit_test:包含有關進行 C 語言單元測試的功能庫;

    1.12 xml :是一個流式的 xml 解析器及構造器,可以支持阻塞及阻塞式網絡通信;

    1.13 json :是一個流式的 json 解析器及構造器,可以支持阻塞及阻塞式網絡通信;

    1.14 master:是在 UNIX 環境下支持多種服務器模式的服務器框架,目前主要支持多進程模式、多進程多線程模式、多進程非阻塞模式、UDP通信模式以及多進程觸發器模式;

 

    2) lib_protocol

    2.1 http:HTTP 協議相關的庫,支持 HTTP/1.1,通訊方式支持同步/異步方式

    2.2 icmp:icmp/ping 協議庫,支持同步/異步通信方式

    2.3 smtp:支持 SMTP 客戶端通信庫

 

    3) lib_acl_cpp

    3.1 stdlib:主要包含字符串處理類(string),xml/json 解析庫,zlib 壓縮庫(依賴于 zlib 庫), 日志記錄類, 字符集轉碼(在UNIX環境下需要 iconv 庫), 線程類/線程池類, 互斥類(支持線程鎖、文件鎖);

    3.2 mime:支持完整的與郵件編碼相關的庫(郵件的 rfc2045-rfc2047/rfc822/base64/uucode 編碼及解碼庫);

    3.3 master:封裝了 C 版 lib_acl 庫中的服務器框架,支持進程池模式、線程池模式、非阻塞模式、UDP 通信模式以及觸發器模式;

    3.4 stream:支持網絡流/文件流,支持阻塞/非阻塞兩種通信方式,在非阻塞模式下支持 select/poll/epoll/iocp/win32 message/kqueue/devpoll;支持 ssl 加密傳輸(阻塞及非阻塞方式,需要 polarssl庫);

    3.5 ipc:在非阻塞通信方式,提供了阻塞模塊與非阻塞模塊整合的方式;

    3.6 http:比較完整的 HTTP 通信庫及協議解析庫,支持客戶端及服務端模式,支持 ssl/gzip 傳輸方式; 支持類似于 Java HttpServlet 方式的大部分接口,方便編寫 CGI 及服務器程序;

    3.7 db:封裝了 MYSQL/SQLITE 庫,支持數據庫連接池;

    3.8 hsocket:實現了完整的 handler-socket 客戶端通信庫;

    3.9 beanstalk:支持消息隊列服務器 beanstalkd 的客戶端通信庫;

    3.10 connpool:通用的 TCP 連接池框架;

    3.11 memcache:支持 memcached 通信協議的客戶端庫(支持連接池);

    3.12 queue:磁盤文件隊列管理器;

    3.13 session:會話管理器,目前支持使用 memcache 客戶端庫存儲會話數據。

 

    4) samples:該目錄下的程序主要是基于 lib_acl 及 lib_protocol 庫的示例

    5) lib_acl_cpp/samples:該目錄下的程序主要是基于 lib_acl_cpp 庫的示例

 

下載:http://sourceforge.net/projects/acl/

svn:svn checkout svn://svn.code.sf.net/p/acl/code/trunk acl-code

github:https://github.com/zhengshuxin/acl

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!