C++網絡通信與服務器編程框架,acl 3.1.2 版本發布

pjp 9年前發布 | 24K 次閱讀 acl

acl 3.1.2 版本發布了,acl 是 one advanced C/C++ library 的簡稱,主要包括網絡通信庫以及服務器框架庫等功能,支持 Linux/Windows/Solaris/FreeBsd/MacOS 平臺;整個 acl 項目主要包含三個函數庫:lib_acl(純C開發的基礎庫,主要包含網絡通信及服務器編程框架以及其它豐富的功能)、lib_protocol(包含 HTTP/PING/SMTP 通信協議的C語言實現)、lib_acl_cpp(基于 lib_acl 及 lib_protocol 兩個C庫,提供了更為強大的編程接口及豐富的功能類);本次 acl 升級的主要內容有:修復了 acl redis 庫中幾處 BUG,增加了對 redis cluster 管理命令的支持;對 redis 客戶端庫提供了英文注釋;提供了用于創建與維護 redis 集群的工具 redis_builder;增加了針對集群消息隊列 disque 的支持;通用連接池模塊功能的完善。

acl 包括以下豐富的常用函數庫:
1、常見網絡應用庫: SMTP 客戶端庫/PING 庫/memcache 客戶端庫/handlersocket 客戶端庫/beanstalk 客戶端庫/redis 客戶端庫/disque 客戶端庫
2、HTTP 網絡庫:HTTP 客戶端/服務端庫,C++版 HttpServlet 類,HTTP COOKIE/HTTP SESSION 等
3、郵件解析庫:mime解析庫/RFC2047/RFC2048/mime base64/mime qp/mime uucode 等
4、網絡通信庫:阻塞/非阻塞網絡 IO 庫(其中 lib_acl_cpp 庫通過嵌入 polarssl 而具備了 SSL 的能力)
5、服務器框架:包括進程池模式、線程池模式、非阻塞模式、UDP通信模式及觸發器模式
6、事件引擎:支持 select、poll(for unix)、epoll(for linux)、kqueue(for bsd)、devpoll(for solaris)、iocp(for win32)、win32 窗口消息(for win32)事件引擎
7、通用連接池庫:高效的連接池基礎類庫,支持豐富的功能
8、數據庫客戶端庫:對原生的數據庫客戶端庫進行了二次封裝,使編程更為簡易,功能更為豐富
9、xml/json 流式解析庫:區別于網上其它已有的 xml/json 解析庫,acl 中的 xml/json 解析庫采用有限狀態機方式解析數據,處理方式更為靈活

一、基礎 C 庫:lib_acl
.編譯: acl_define_win32.h 中的 socklen_t 的定義原來使用宏定義 #define 方式,有時會因為有些版本的 VC 提供了此類型而導致編譯報錯,現在改為 typedef 定義方式

二、lib_protocol 庫
.無

三、lib_acl_cpp 庫
.新特性:redis_client_cluster 類支持靜態初始化哈希槽與服務結點的對應關系,從而避免了運行時的重定向
.新特性:新增加類 redis_cluster,支持官方新公布的 CLUSTER 指令集
.新特性:增加了 redis_slot 類及 redis_node 類,方便對集群中的 redis 結點進行管理
.新特性:redis_cluster 類中的 cluster_nodes, cluster_slots, cluster_slaves, cluster_info 方法返回組織好的結果集
.新特性:connect_monitor 連接池自動檢測類支持應用重載 IO 處理過程,從而可以面向更復雜的通信協議處理情況
.新特性:增加了分布式消息隊列 disque 的客戶端庫模塊

.性能提升:HttpServletResponse::write 當采用 chunk 傳輸時由原來的多次調用系統 API write 方式改為只調用一次 writev,從而減少了系統調用次數

.問題修復:redis_command.cpp 中最后三個 get_strings 函數在取得 rr 下標時有誤
.問題修復:redis_cluster 類中的 reset 方法與基類 redis_command 中的方法重名,造成了命名污染,現將 redis_cluster 中的所有方法都加了前綴 cluster_
. 問題修復:acl::redis 類因為是虛繼承了 redis_xxx 類,所以無法通過這些類的構造函數將參數傳遞給基類 redis_command 的構造函數,必須在 acl::redis 的構造函數中顯示地將參數傳遞給基類 redis_command 的構造函數
.問題修復:redis_client::get_redis_string 當數據長度為 0 時會出現異常, 從而兼容 redis 是允許數據值為空串的情況
.問題修復:redis_command.cpp 中的 run 方法在處理服務器返回的 ASK 響應后應該向目標服務器先發送 ASKING 指令
.問題修復:redis_command 類中的方法 get_client_addr 當采用集群模式時不能取得當前所用連接的服務端地址
.問題修復:samples/connect_manager,異步檢測對象應該是局部的,不應與 monitor 綁定在一起,增加了 check_async 回調類
.問題修復:類 aio_timer_callback 中的方法 set_time 中在給成員變量 present_ 賦值時,在 32 位系統下會造成計算結果值的整形溢出

四、示例
1、app/redis_tools/redis_builder:該工具用于創建與管理 redis 集群
2、lib_acl_cpp/samples/redis/redis_cluster:該例子于用測試 redis 中的 CLUSTER 命令集

五、參考鏈接:

oschina git: https://git.oschina.net/zsxxsz/acl/
download:http://sourceforge.net/projects/acl/
github:https://github.com/zhengshuxin/acl

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