網絡與服務器編程框架庫 acl_3.0.13 發佈

acl 3.0.13 版本 (項目主頁:https://sourceforge.net/projects/acl/,技術文章主頁:http://zsxxsz.iteye.com/)) 發佈了,acl 是 one Advanced C/C++ library 的簡稱,主要包括網絡通訊庫以及服務器框架庫等功能,支持 Linux/Windows 平臺;整個 acl 項目主要包含三個函數庫:lib_acl(純C開發的基礎庫,主要包含網絡通訊及服務器編程框架以及其它豐富的功能)、lib_protocol(包含 HTTP/PING/SMTP 通訊協議的C語言實現)、lib_acl_cpp(基於 lib_acl 及 lib_protocol 兩個C庫,提供了更爲強大的編程接口及豐富的功能類);本次 acl 升級除了一些常見 bug 修復外,主要針對 ACL 的C++(lib_acl_cpp)模塊增長了 線程及線程池類庫。mysql

 

acl 包括如下豐富的經常使用函數庫:linux

一、常見網絡應用庫: SMTP 客戶端庫/PING 庫/memcache 客戶端庫/handlersocket 客戶端庫/beanstalk 客戶端庫sql

二、HTTP 網絡庫:HTTP 客戶端/服務端庫,C++版 HttpServlet 類,HTTP COOKIE/HTTP SESSION 等數據庫

三、郵件解析庫:mime解析庫/RFC2047/RFC2048/mime base64/mime qp/mime uucode 等編程

四、網絡通訊庫:阻塞/非阻塞網絡 IO 庫(其中 lib_acl_cpp 庫經過嵌入 polarssl 而具有了 SSL 的能力)json

五、服務器框架:包括進程池模式、線程池模式、非阻塞模式、UDP通訊模式及觸發器模式服務器

六、事件引擎:支持 select、poll(for unix)、epoll(for linux)、kqueue(for bsd)、devpoll(for solaris)、iocp(for win32)、win32 窗口消息(for win32)事件引擎網絡

七、通用鏈接池庫:高效的鏈接池基礎類庫,支持豐富的功能多線程

八、數據庫客戶端庫:對原生的數據庫客戶端庫進行了二次封裝,使編程更爲簡易,功能更爲豐富app

九、xml/json 流式解析庫:區別於網上其它已有的 xml/json 解析庫,acl 中的 xml/json 解析庫採用有限狀態機方式解析數據,處理方式更爲靈活

 

1、基礎庫:lib_acl

. acl_debug.c: 調整了參數的表示方法,調整後的調試標籤及級別字符串的格式: 1:1, 2:10, 3:8...  or 1:1; 2:10; 3:8...

. feature: acl_master 服務器模板添加了 master_debug 配置項,方便用戶在使用 acl 的服務器框架時調試日誌

. feature: acl_aio_app_main.c/acl_ioctl_app_main.c, 增長了配置項 master_deny_banner 容許用戶自定義拒絕鏈接的內容信息

. feature: acl_pthread_pool.c 增長了 acl_pthread_pool_qlen 函數,提供當前線程池隊列中未被處理的任務數量

. performance: acl_vstream.c,將 __vstream_sys_read 的讀過程進行了優化,更名爲 __sys_read,以容許將用戶輸入的緩衝區作爲系統 read 的內存地址,從而在調用 

acl_vstream_readn/acl_vstream_read 時避免了數據的二次拷貝

. compile: acl_aio_app_main.c, 其中在調用 write 時,須要判斷返回值,不然會在高版本 gcc 上報警告

. bugfix: acl_mylog.c, 當經過 UDP 方式記錄日誌時,由於以前 acl_vstream.c 容許註冊外部接口的改變而發生了不兼容性問題

. bugfix: acl_xml_util.c, acl_xml_tag_add() 在調用 acl_token_tree_add 時,第三個參數應該調用 ACL_TOKEN_F_STOP,原來是 ACL_TOKEN_F_PASS

 

2、功能豐富的C++庫:lib_acl_cpp

. feature: 增長了線程類(stdlib/thread)及線程池類(stdlib/thread_pool)

. feature: thread 類分離出一個基類 thread_job,從而使邏輯更爲清晰

. feature: 當使用 GCC 進行編譯時,針對全部具備變參的函數接口定義添加了屬性限定---__attribute__((format(printf, n, m))),這樣便於在編譯期就能發現因參數使用不當而致使的錯誤

. feature: HttpServletResponse 類支持 Transfer-Encoding: chunked 傳輸方式

. feature: connect_manager/connect_pool 容許動態添加、刪除鏈接池對象

. bugfix: master_udp.cpp,當以 alone 方式運行時,沒有將 socket_stream 賦給 ACL_VSTREAM::context,致使在 service_main 時又從新打開一次

. bugfix: thread.cpp,當線程爲分離方式建立時 thread::thread_run 在調用完虛函數 run 後不得再引用線程對象的 return_arg_,不然會形成內存非法訪問

. bugfix: db/db_mysql.cpp, 在打開 mysql 鏈接時設置字符集,判斷是否設置成功的方法有誤

. bugfix: master_udp.cpp, master_udp::service_main() 中的 socket_stream 是臨時堆棧變量,若是被用戶外部引用則可能形成內存非法訪問

. samples: 增長了 master_udp_threads,該例子將線程池與 master_udp 模板結合

. samples: 增長了測試用例 thread_client,一個多線程網絡客戶端程序

. samples: 增長了測試用例 thread 用以測試線程類

. samples: 增長了測試用例 thread_pool 用以測試線程池類

. samples: 添加了 master_aio_proxy 用做純 TCP 非阻塞代理

相關文章
相關標籤/搜索