跨平台網路通訊與伺服器程式設計框架庫(acl庫)介紹

2021-08-27 19:12:48 字數 1772 閱讀 7982

acl 工程是乙個跨平台(支援linux,win32,solaris,macos,freebsd)的網路通訊庫及伺服器程式設計框架,同時提供更多的實用功能 庫。通過該庫,使用者可以非常容易地編寫支援多種模式(多執行緒、多程序、非阻塞、觸發器、udp方式)的伺服器程式,web 應用程式,資料庫應用程式。此外,該庫還提供了常見應用的客戶端通訊庫(如:http、smtp、icmp、memcache、beanstalk),常 見流式編譯碼庫:xml/json/mime/base64/uucode/qpcode/rfc2047 etc。

本工程主要包含 5 個庫及大量示例。5 個庫的說明如下:

1.2.1、網路通訊庫

1.2.2、網路 io 事件引擎

支援 select(unix/linux/win32)、poll(unix/linux)、epoll(linux)、kqueue(bsd)、 devpoll(solaris)、iocp(win32)、視窗訊息(win32) 等系統事件引擎,同時支援 reactor 及 proactor 兩種程式設計模型。

1.2.3、網路伺服器框架

1.2.4、常用資料結構模組

該模組提供了常見的雜湊表(及多種雜湊演算法)、動態陣列、雙向鍊錶、平衡二叉樹、佇列、二分塊查詢樹、256 叉匹配樹等陣列結構;提供了統一的資料結構遍歷方法(採用 acl_foreach)。

1.2.5、 記憶體操作模組

該模組提供三種記憶體池模型:

1.2.6、常用字串操作模組

支援字串匹配查詢、前(後)向比較、字串分割、字串大小寫轉換、h2b/b2h 轉換、url 編碼/解碼等功能。

1.2.7、檔案目錄模組

支援多級目錄建立、多級目錄掃瞄、檔案控制代碼快取等功能,同時在處理多級目錄採用迴圈方式,避免了遞迴方式時可能的棧溢位的隱患。

1.2.8、讀配置檔案模組

支援讀 name=value 形式的配置檔案,value 較長時可以使用反斜槓()折行,採用配置表方式提取配置檔案中的配置項。

1.2.9、執行緒及執行緒池模組

提供了跨平台的支援 posix 規範的執行緒介面(支援win32);執行緒池模組通過多種措施最大程度地減少執行緒任務分配時的鎖衝突(用在 acl 伺服器框架中多程序多執行緒服務模型中)。

1.2.10、數字鍵的 k-v 磁碟儲存模組(zdb)

採取 key/value 分塊儲存方式,因為 key 限定為數字型別,只需記憶體計算便可算出 key 的位置,key 中存放了 value 的位置,所以對於任何的資料查詢只需兩次磁碟定位。(本人在和訊做流量統計儲存時,使用該種方式替代了bsd、tc 等採用b樹的 k-v 儲存)

1.2.11、流式解析庫

該模組包括 xml、json、rfc2047、mime、base64、uucode、qpcode、charset 等編譯碼庫,這些解碼庫均採用流式解析方式,適合於多種網路 io 模型(阻塞/非阻塞tcp、udp)。

1.2.12、資料庫封裝庫

設計了統一的資料庫操作介面及連線池處理方式,目前支援 sqlite/mysql。

1.2.13、檔案佇列處理庫

支援多組目錄佇列檔案的建立、掃瞄、刪除等操作;常用於臨時檔案佇列排程的服務程式中。

整個工程目前支援 linux(as4,5,6, cs4,5,6, ubuntu), windows, macos, freebsd, solaris。

當在 win32 環境下使用動態庫時有幾點需要注意:

github:

sourceforge:

acl 工程有大量的測試用例(近200個):

此外,還幾個實用的工具:

C 跨平台網路伺服器物件導向實現

訊息標頭檔案messageheader.hpp ifndef messageheader hpp define messageheader hpp enum cmd 訊息頭 struct dataheader struct login public dataheader char username ...

客戶端伺服器結構網路通訊

蘋果公司為ios下c s結構網路通訊開發提供了一些api框架和類庫,既有面向高層的,也有面向低層次的,還有基於蘋果bonjour發現服務的api。面向高層次的api 即web service通訊開發,包括nsurlrequest nsmutableurlrequest nsurlconnection...

跨平台高效能TCP伺服器框架 boost

王子 基於boost的asio封裝的高效能tcp伺服器。asio已經有很好的事件封裝機制,只有底層事件,沒有針對tcp建立會話機制 也沒有多包進行合包,以包為單位的事件提交機制。由於以上多種原因,決定對boost庫進行更高的抽象和封裝,對開發者提供一種更為便利的使用介面。本 實現了一下主要功能 1....