acl 3.0.13 版本 (專案主頁:技術文章主頁: 發布了,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)模組增加了 執行緒及執行緒池類庫。
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 解析庫採用有限狀態機方式解析資料,處理方式更為靈活
一、基礎庫: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_pthread_pool.c 增加了 acl_pthread_pool_qlen 函式,提供當前執行緒池佇列中未被處理的任務數量
. performance: acl_vstream.c,將 __vstream_sys_read 的讀過程進行了優化,改名為 __sys_read,以允許將使用者輸入的緩衝區做為系統 read 的記憶體位址,從而在呼叫
acl_vstream_readn/acl_vstream_read 時避免了資料的二次拷貝
. 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
二、功能豐富的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 非阻塞**
跨平台網路通訊與伺服器程式設計框架庫(acl庫)介紹
acl 工程是乙個跨平台 支援linux,win32,solaris,macos,freebsd 的網路通訊庫及伺服器程式設計框架,同時提供更多的實用功能 庫。通過該庫,使用者可以非常容易地編寫支援多種模式 多執行緒 多程序 非阻塞 觸發器 udp方式 的伺服器程式,web 應用程式,資料庫應用程式...
acl 伺服器程式設計框架特點介紹
acl 中伺服器框架模組是乙個非常重要的模組,使用該模組技術人員可以快速地寫出穩定 安全 高效的網路服務應用,該模組主要 於著名的郵件伺服器程式 postfix 中的 master 模組,為了便於開發者使用,本人又增加了許多有益的功能模組。在 acl 的文章分類 acl開發 伺服器篇 和 acl c...
acl 伺服器程式設計框架特點介紹
acl 中伺服器框架模組是乙個非常重要的模組,使用該模組技術人員可以快速地寫出穩定 安全 高效的網路服務應用,該模組主要 於著名的郵件伺服器程式 postfix 中的 master 模組,為了便於開發者使用,本人又增加了許多有益的功能模組。在 acl 的文章分類 acl開發 伺服器篇 和 acl c...