C/C++網絡與服務器編程框架庫,acl_3.0.18 發布

jopen 10年前發布 | 26K 次閱讀 acl

acl 3.0.18 版本 (項目主頁:https://sourceforge.net/projects/acl/,技術文章主頁:http: //zsxxsz.iteye.com/)) 發布了,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 升級除了一些 bug 修復外,主要優化了 ACL 中的網絡服務器框架、事件引擎以及線程池調度算法,同時增加了客戶端連接分發器模塊。
 
acl 包括以下豐富的常用函數庫:
1、常見網絡應用庫: SMTP 客戶端庫/PING 庫/memcache 客戶端庫/handlersocket 客戶端庫/beanstalk 客戶端庫
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_thread_pool.c)的子線程的等待時間間隔分成多個等待時間片
.新特性:服務器模板(acl_aio_server.c, acl_thread_server.c)支持向連接分發器報告狀態,從而允許從連接派發器處接收客戶端連接
.新特性:借鑒了 glib 庫中的一些宏定義,針對 gcc 或 vc 編譯器增加了一些編譯屬性開關(如過期 API 調用警告)
.性能優化:線程池調度算法優化(每一個線程一個獨立的線程條件變量,從而可以有效地避免線程池事件通知時的驚群現象)
.性能優化:事件引擎支持檢測全部套接字的時間間隔設置,當并發連接較大時,可以有效地提升事件檢測的性能
.性能優化:禁用事件引擎中的自旋鎖,降低 CPU 損耗
.問題修復:acl_vstream_net.c 中 acl_vstream_accept_ex 接收外來連接時,判斷監聽描述符的類型方式有誤
.問題修復:acl_getpeername 函數當客戶端連接的是域套接字時,給出的地址不對
.問題修復:acl_master 服務器模塊在 reload 配置文件時有可能會導致產生 core 文件
.問題修復:events_epoll_thr.c 在函數 event_disable_readwrite 中調用 epoll_ctl 刪除描述字時,也必須保證第四個參數(struct epoll_event*) 非空,否則在低版
本 LINUX 下會有問題
.問題修復:events_iocp.c 關閉未決狀態的完成端口在 WIN XP 下存在 BUG,應該在套接字關閉前先取得完成端口狀態

二、lib_acl_cpp 庫
.新特性:connect_manager 連接池集群管理器增加了后臺檢測功能,新增加的類 connect_monitor 為一個非阻塞線程,會在后臺定期檢測連接池集群中的所有服務器的端口是否存活
.新特性:借鑒了 glib 庫中的一些宏定義,針對 gcc 或 vc 編譯器增加了一些編譯屬性開關(如過期 API 調用警告)
.新特性:db_pool 類增加了 peek_open 方法,可以在獲取數據庫對象時直接打開數據庫連接
.新特性:將 master_threads 替換為 master_threads2
.問題修復:md5.cpp 其中在 WIN32 下使用 sprintf_s 函數時,傳入的長度參數應為 3,否則 VC 會報錯
.問題修復:event_timer.cpp, 在 32 位機下會因 64 位整數轉 32 位整數而導致 32 位整數溢出問題
.問題修復:master_threads/master_threads2 存在內存泄露問題

三、app/master_dispatch: 增加了客戶端連接分發器模塊,通過該模塊,可以非常均勻地將客戶端連接分發給使用 acl 服務器框架的應用子進程

參考鏈接:
技術博客:http://zsxxsz.iteye.com/
download: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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!