网络与服务器编程框架库 acl_3.0.12 发布
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
acl 3.0.12 版本 (項(xiàng)目主頁(yè):https://sourceforge.net/projects/acl/, ?技術(shù)文章主頁(yè):http://zsxxsz.ietye.com/) 發(fā)布了,acl 是 one Advanced C/C++ library 的簡(jiǎn)稱,主要包括網(wǎng)絡(luò)通信庫(kù)以及服務(wù)器框架庫(kù)等功能,支持 Linux/Windows 平臺(tái);整個(gè) acl 項(xiàng)目主要包含三個(gè)函數(shù)庫(kù):lib_acl(純C開發(fā)的最基礎(chǔ)庫(kù),主要包含網(wǎng)絡(luò)通信及服務(wù)器編程框架以及其它豐富的功能)、lib_protocol(包含 HTTP/PING/SMTP 通信協(xié)議的C語(yǔ)言實(shí)現(xiàn))、lib_acl_cpp(基于 lib_acl 及 lib_protocol 兩個(gè)C庫(kù),提供了更為強(qiáng)大的編程接口及豐富的功能類);本次 acl 升級(jí)除了一些常見 bug 修復(fù)外,主要針對(duì) ACL 的通信模塊增加了 UDP 的通信能力,同時(shí)增加了 UDP 服務(wù)器通信模板。
?
acl 包括以下豐富的常用函數(shù)庫(kù):
1、常見網(wǎng)絡(luò)應(yīng)用庫(kù): SMTP 客戶端庫(kù)/PING 庫(kù)/memcache 客戶端庫(kù)/handlersocket 客戶端庫(kù)/beanstalk 客戶端庫(kù)
2、HTTP 網(wǎng)絡(luò)庫(kù):HTTP 客戶端/服務(wù)端庫(kù),C++版 HttpServlet 類,HTTP COOKIE/HTTP SESSION 等
3、郵件解析庫(kù):mime解析庫(kù)/RFC2047/RFC2048/mime base64/mime qp/mime uucode 等
4、網(wǎng)絡(luò)通信庫(kù):阻塞/非阻塞網(wǎng)絡(luò) IO 庫(kù)(其中 lib_acl_cpp 庫(kù)通過嵌入 polarssl 而具備了 SSL 的能力)
5、服務(wù)器框架:包括進(jìn)程池模式、線程池模式、非阻塞模式、UDP通信模式及觸發(fā)器模式
6、事件引擎:支持 select、poll(for unix)、epoll(for linux)、kqueue(for bsd)、devpoll(for solaris)、iocp(for win32)、win32 窗口消息(for win32)事件引擎
7、通用連接池庫(kù):高效的連接池基礎(chǔ)類庫(kù),支持豐富的功能
8、數(shù)據(jù)庫(kù)客戶端庫(kù):對(duì)原生的數(shù)據(jù)庫(kù)客戶端庫(kù)進(jìn)行了二次封裝,使編程更為簡(jiǎn)易,功能更為豐富
9、xml/json 流式解析庫(kù):區(qū)別于網(wǎng)上其它已有的 xml/json 解析庫(kù),acl 中的 xml/json 解析庫(kù)采用有限狀態(tài)機(jī)方式解析數(shù)據(jù),處理方式更為靈活
?
一、基礎(chǔ)庫(kù):lib_acl
. feature: acl_single_server.c, acl_ioctl_server.c, acl_aio_server.c, acl_udp_server.c 增加了可以獲得本地監(jiān)聽套接口流對(duì)象集合的函數(shù)
. feature: master 服務(wù)器框架增加了專門針對(duì) UDP 的服務(wù)器模板 acl_udp_server.c/acl_udp_params.h
. feature: ACL_VSTREAM 支持 UDP 傳輸; acl_vstream_net.c 中增加了 acl_vstream_bind 函數(shù)用來綁定 UDP 傳輸模式
. feature: ACL_VSTREAM 增加了 acl_vstream_set_local_addr, acl_vstream_set_peer_addr
. feature: ACL_VSTREAM 中添加了 struct sockaddr_in 類型的兩個(gè)指針,以便于 ACL_VSTREAM 很容易支持 UDP 傳輸
. feature: ACL_VSTREAM 對(duì)象增加了 acl_vstream_set_local, acl_vstream_set_remote, acl_vstream_set_path 三個(gè)函數(shù)
. performance: ACL_VSTREAM 中將 remote_addr, local_addr 定義為指針,從而大大減少了 ACL_VSTREAM 對(duì)象創(chuàng)建時(shí)的尺寸大小
. compile: 增加了工程文件 Makefile.db,使用該工程文件編譯,則可以使用 mysql 數(shù)據(jù)庫(kù)功能,使用 Makefile 工程文件編譯,則可以 lib_acl.a 更為干凈 (即不依賴于任何第三方庫(kù))
. bugfix: events_select.c/events_select_thr.c 當(dāng)套接字監(jiān)聽集合為空時(shí)休眠的時(shí)間單位為秒,需要將微秒級(jí)的 delay 轉(zhuǎn)為秒級(jí)
. other: events 模塊 ACL_EVENT_NOTIFY_RDWR/ACL_EVENT_NOTIFY_TIME 函數(shù)接口類型重新定義,在回調(diào)函數(shù)中增加了 ACL_EVENT,ACL_VSTREAM 參數(shù),從而方便用戶直接使用;因?yàn)檫@兩個(gè)接口的重新定義,導(dǎo)致了很多功能模塊做相應(yīng)修改,主要影響的模塊有:event, master, aio, ioctl
. other: 將 master 模塊下的源文件代碼排版整理了一下
. other: acl_vstream.c: acl_vstream_set_remote 重命名為 acl_vstream_set_peer
?
二、應(yīng)用協(xié)議庫(kù):lib_protocol
. bugfix: http_chat_async.c 中 http_res_body_get_async/http_req_body_get_async 兩個(gè)函數(shù)沒有對(duì) ctx->read_cnt 置 0
. other: lib_acl 庫(kù)中 ACL_EVENT_NOTIFY_RDWR/ACL_EVENT_NOTIFY_TIME 函數(shù)接口定義的修改,與之相關(guān)的模塊(icmp)進(jìn)行了修改
. other: 因?yàn)?lib_acl 基礎(chǔ)庫(kù)中的 ACL_VSTREAM 讀寫回調(diào)函數(shù)接口變更,調(diào)整了與之相關(guān)的部分內(nèi)部接口,主要影響到了 icmp 模塊中 icmp_stream.c 中的內(nèi)部接口
?
三、功能豐富的C++庫(kù):lib_acl_cpp
. feature: aio_stream 增加了 get_peer/get_local 用來獲得網(wǎng)絡(luò)連接流的本地及遠(yuǎn)程地址
. feature: master_udp 服務(wù)器模板增加了可在 proc_on_init() 虛函數(shù)中獲得本地綁定套接字流對(duì)象集合的函數(shù)功能: get_sstreams()
. feature: master 服務(wù)器框架增加了 master_udp 服務(wù)模板類
. feature: connect_manager 類增加了根據(jù)鍵值字符串的哈希值獲取連接池對(duì)象的虛函數(shù),從而有利于在分布式環(huán)境里使用連接池
. feature: connect_manager/connect_pool 類增加了針對(duì)每個(gè)連接池有一個(gè)其位于連接池集合中的下標(biāo)索引
. feature: http_request::request 中原來只能指定 GET/POST 兩種請(qǐng)求方法,現(xiàn)在可以指定多種請(qǐng)求方法
. feature: http_header 允許設(shè)置自定義 (即除 GET/POST/PUT/CONNECT/PURGE之個(gè)) 的請(qǐng)求頭命令字
. feature: memcache 類支持流式讀寫數(shù)據(jù),從而可以支持大 value 的存取方式
. feature: master_threads 類在單獨(dú)運(yùn)行方式的使用場(chǎng)景接近于在 acl_master 框架下的運(yùn)行場(chǎng)景
. feature: master_threads/master_aio/master_proc 類支持在單獨(dú)運(yùn)行模式下監(jiān)聽多個(gè)地址
. feature: acl_cpp_init.cpp 中添加了 WIN32 下關(guān)閉 DOS 窗口的函數(shù)
. feature: http/memcache 模塊增加了連接池管理類
. compile: acl_cpp_init.cpp 中 freopen 返回的文件句柄因?yàn)槲幢皇褂枚咕幾g器報(bào)警
. compile: 增加了 Makefile.db 工程文件,使用該文件編譯則需要 mysql/sqlite 庫(kù); 如果不需要數(shù)據(jù)庫(kù)相關(guān)的功能,則使用 Makefile 工程文件進(jìn)行編譯
. bugfix: memcache 類中當(dāng)連接異常中斷重試時(shí)會(huì)因請(qǐng)求數(shù)據(jù)被清掉而出錯(cuò),原因是請(qǐng)求與響應(yīng)共用同一個(gè)緩沖區(qū)所致,現(xiàn)將請(qǐng)求緩沖區(qū)與響應(yīng)緩沖區(qū)分開
. bugfix: memcache.cpp 當(dāng)調(diào)用 open 函數(shù)連接 memcached 服務(wù)器失敗時(shí),用 valgrind 檢查出記錄錯(cuò)誤日志時(shí)引用了一個(gè)未經(jīng)初始化的變量
. samples: 增加了針對(duì) UDP 的測(cè)試用例 udp_client?
. other: lib_acl 庫(kù)中 ACL_EVENT_NOTIFY_RDWR/ACL_EVENT_NOTIFY_TIME 函數(shù)接口定義的修改,與之相關(guān)的模塊進(jìn)行了修改
. other: 因?yàn)?lib_acl 基礎(chǔ)庫(kù)中的 ACL_VSTREAM 讀寫回調(diào)函數(shù)接口變更,調(diào)整了與之相關(guān)的部分內(nèi)部接口,主要影響到了 ssl_stream/ssl_aio_stream
. other: connpool/http_request_pool/memcache_pool: 調(diào)整了構(gòu)造函數(shù),去掉了最后一個(gè)參數(shù)
轉(zhuǎn)載于:https://my.oschina.net/u/568966/blog/309568
總結(jié)
以上是生活随笔為你收集整理的网络与服务器编程框架库 acl_3.0.12 发布的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 停用nfs导致cacti无法抓取snmp
- 下一篇: 限制USB延迟启动