1. 程式人生 > >zcelib - One cplusplus C++ crossplatform library use for develop server,similar to ACE.

zcelib - One cplusplus C++ crossplatform library use for develop server,similar to ACE.

mil 網絡編程 適應 服務 not etop 共享內存 轉換 ado

zcelib - One cplusplus C++ crossplatform library use for develop server,similar to ACE.
OS適配層,為了適應WINDOWS和LINUX兩個環境的代碼增加的一層,同時都有一些擴展,基本可以替代ACE了。這部分其實用不少有趣的代碼,主要思路是在Windows下模擬Posix的代碼。讓我的代碼可以在Windows下直接調試。這部分代碼都是以 zce_os_adapt_XXX 開頭命名的。代碼都是在ZCE_LIB名字空間下,後面的函數名稱和POSIX函數名稱基本移植。。比較大塊的功能包括,網絡,時間,文件系統,GETOPT,C STRING的一些函數,線程,各種同步鎖,共享內存的處理,進程和線程的監控。

LOG日誌庫和調試庫,以及一些調試的宏的封裝,用於記錄日誌,可以定義分割日誌的方式等(大小,日期),日誌可以定級輸出,輸出點包括文件,stdout,stderr,Windows下的TRACE, 調試庫,提供完善的調試方法,VC在這方面很強,偷學了一些.調試還可以輸出當前的堆棧信息等。早起的日誌類其實是對ACE日誌的封裝,但自己的代碼要獨立成行的時候還是把原來的那個改造了拿出來用了。另外提供一個完全模版化的日誌輸出接口
TIME 時間和定時器,原來打算只用 timeval,結果發現Time在網絡編程中無處不在,還是有一個自己的封裝比較容易控制,結果就有了ZCE_Time_Value這個非常底層的類,他內部就是 timeval,好在他在Visual C++也有,在OS適配曾,就封裝了各種系統的時間到timeval的轉換,有了Time當然就要有定時器,我們的定時器是有2種封裝,一種是比較常見的TimerHeap 定時器堆,一種是 TimerWheel 定時器時間輪,相對而言,TimerWheel具有更加強大的性能。
NET網絡封裝,包括網絡函數,OO的封裝包括網絡地址,UDP,TCP的封裝,包括阻塞和非阻塞的發送,接收接口。連接器Connector和接收器Acceptor。可以大大方便你的開發。(本來這部分完全是使用ACE的,但最後還是去掉了ACE的部分代碼,所以還是被迫自己實現了一個網絡層。)
Reactor反應器,包括select 的反應器,在Windows下和Linux下都可以使用,epoll的反應器,
Thread線程封裝,線程包括OS層的封裝,OO的封裝包括線程對象,線程的管理器,
MMAP STL 一套在共享內存裏面實用的STL(大部分接口類似,但實現還是完全不一樣的。)對於MMAP STL的一些代碼,我封裝他們純屬無奈,其實我不認為使用MMAP有多大好處.我喜歡線程和普通內存,但是如果使用多進程的模型,而且要有一個持久存儲時,你就必須用共享內存.而幾乎所有的容器模板(包括ACE的)都使用了指針,而指針這種東西對於共享內存又是天敵.不過也好,可以通過寫這些東西,徹底理解STL.(雖然我認定多線程的代碼可以美麗優雅,決不遜色於多進程的各種模型,但是持久存儲那是一堵墻),而持久存儲也許是一個好看但並不太實用的東西,恢復現場可能會有無數的問題.小心。
MySQL接口封裝,完整和方便是這個庫最大的好處。我在2005年甚至封裝了STMT.前衛把。封裝接口和原生接口類似,原生API是還不錯,但還是有很多細節沒有屏蔽。OO封裝分成connect,cmd,result幾個部分封裝,封裝包裝了重連,自動釋放等功能。同時也有STMT的一組實用封裝。但MySQL的STMT在多表的情況下實用並不方便,必須每個表保存一個STMT對象。(不如Oracle)所以原意實用的人不多。
SQLite
加解密
Hash算法
快速壓縮算法
INI XML INI和XML配置文件讀取,會將配置讀取到一個配置樹上,另外,還有一個和Win32的API類似INI文件的讀寫,(不過也就是因為想和他的API類似,把代碼搞復雜了),這塊代碼估計是這兒最老的代碼,原來裏面還有我當年的工號,9527,這是你的終生編號.
iNotify 這個有一個簡單的封裝,甚至可以在Windows和Linux兩個平臺下使用。
MMAP 操作庫,包括一些類似STL的模版,
SERVERKIT 服務器的工具類,目前提供了一個使用MMAP的狀態統計類。
PIDFILE 防止服務器多次啟動的PID文件類,很有意思,發現UNIX通信卷2也講過這些東西。土呀,還是土呀。
RADOM 隨機數的封裝,這個代碼其實和BOOST沒有啥關系。是從GNU的數學課中慢慢扣出來的,而且我增加了一個薄薄的模板封裝。從而讓實用更加方便。
Lua接口的封裝,
https://github.com/sailzeng/zcelib

zcelib - One cplusplus C++ crossplatform library use for develop server,similar to ACE.