Skip to content

kevin1sMe/zcelib

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

92 Commits
 
 
 
 
 
 
 
 

Repository files navigation

========================================================================
                    ZCELIB Project Overview
========================================================================

ZCELIB是我无聊开发的一套类库,很多代码都是若干年前的了.代码的开发大部分利用的一些闲暇时间,当然我希望以后他能开源。
其实很多代码可以用其他的库代替,但是他们有些不是太大就是太笨重.一个轻巧的功能何必用数十万行代码实现?
代码只考虑两个平台的通用,Win32,VC++(.NET) 和Linux下的GCC.虽然我相信跨越其他平台也不是难事,但是
那不是我写这套代码的目的.

1.为什么取名ZCE LIB?
这个问题其实很难回答,
大家如果有兴趣看过3D版本肉蒲团的英文名称就知道了,ZEN & SEX,
其实如果说完全和自己无关那是骗人,但主要原因仍然是ZEN是禅的意思。TAO是道,期望自己的库名字有感觉一点。


2.造轮子的故事和我喜欢的C++
我不是一个非常喜欢造轮子的人,但我也忍受不了很多很臭的袜子。
我对于类库是非常挑剔的.简单,优美,稳定,效率高,C++对象化的我才看得上眼.
STL(STLPort),ACE,Boost,才是我看得上的类库.如果一个库实在违反我的代码美学,我宁愿自己写一个.

C++ 是难学易用的东西,不过我建议你掌握.可惜大部分的自称C++的程序员只停留在认为C++是带类的C的阶段

对于说STL,效率低的人,我报以同情.建议你把认为效率低的代码给我重写一下.赫赫.
STL(SGI)那是世界上最聪明的几个脑瓜程序员实现的东西,诬蔑之前掂量一下.

而对于网络和系统API等,
我最开始就没打算尝试,ACE是这个方面的泰斗.我只有顶礼膜拜的份.
但最后,我还是自己实现了一套。有很多时候我就是不断的自我否定,

2.比较完善的功能包括
OS         OS适配层,为了适应WINDOWS和LINUX两个环境的代码增加的一层,基本可以替代ACE了。
C STRING   的一些函数,用于某些特殊环境,
INI        INI文件的读写,实现的功能和Win32的API类似,不过也就是因为想和他的API类似,把代码搞复杂了.
DEBUG      调试库,提供完善的调试方法,VC在这方面很强,偷学了一些.
LOG        日志库,用于记录日志,可以定义分割日志的方式等(大小,日期),日志可以定级输出.
MySQL      一套接口库,封装模型和各种通用接口类似,完整和方便是这个库最大的好处.我甚至封装了STMT.前卫把.
MMAP       操作库,包括一些类似STL的模版,
IDTOSTRING 的一套宏,自认为写的还是比较精巧的.
CGI        使用一个模板输出网页,我推荐你使用CCGI的库,GNU出品的,但是他的没有一个使用模板的分装.我自己写了一个.但是推广失败.自己感觉比公司TLIB的使用方式方便不是1点半点.看来习惯的东西要命.
SERVERKIT  服务器的工具类,目前提供了一个使用MMAP的状态统计类。
PIDFILE    防止服务器多次启动的PID文件类,很有意思,发现UNIX通信卷2也讲过这些东西。土呀,还是土呀。
NET        最后还是去掉了ACE的部分代码,所以还是被迫自己实现了一个网络层。
TIME       时间和定时器,原来打算只用Time value,结果发现


4.
对于MMAP STL的一些代码,我封装他们纯属无奈,其实我不认为使用MMAP有多大好处.
我喜欢线程和普通内存,但是如果使用多进程的模型,而且要有一个持久存储时,你就必须用共享内存.
而几乎所有的容器模板(包括ACE的)都使用了指针,而指针这种东西对于共享内存又是天敌.
不过也好,可以通过写这些东西,彻底理解STL.
(虽然我认定多线程的代码可以美丽优雅,决不逊色于多进程的各种模型,但是持久存储那是一堵墙)
(持久存储也许是一个好看但并不太实用的东西,恢复现场可能会有无数的问题.小心)

5.
对于DEBUG和日志类,
我很难说封装的好坏.我最后还是将日志和调试类结合到一起了.原来我讨厌这个做法,
但是看ACE的代码多了,我也习惯了.
为什么不用ACE的LOG?
原因有两个,ACE的日志不提供按日期分隔日志的方式.而这是我最喜欢的分割日志的方式.
另外,ACE日志要最舒服的使用必须用到服务模型,但是我不打算一定要用他的服务模型.
我将调试使用的宏,和日志的宏分开,调试的宏还是可以在非DEBUG版本屏蔽掉的.
最大满足你对速度得渴望.如果你不理解,建议去读读VC++的调试部分代码.
另外ACE的日志必须用REACTOR,不是所有的环境都回用这个咚咚。
不过最后我还是提供了一个ACE的日志策略类,因为讨厌多线程。我提供了足够的灵活度。


CGI  使用一个模板输出网页,
对于CGI的类库,我推荐你使用CCGI的库,GNU出品的,质量的保障,C++的作品,比公司内部用的那个库TLIB强了也不是一点半点.
但是他的没有一个使用模板的分装.我自己写了一个.但是推广失败.
自己感觉比公司TLIB的使用方式方便也不是一点半点.顺序输出思维,完全避免了字符转换的痛苦,,还可以自己选择输出对象,看来习惯的东西要命.
以后再封装1个类似TLIB的吧.

IDTOSTRING 用过MFC的LoadString吧,我就是要实现它.
我不用资源文件也实现了它,就是用宏.<MFC深入浅出>中对宏的运用让我惊叹.我这儿只是偷师一下.
代码中无数的返回值,而不知道他们的意义.这个东西就是搭救你的.


5.修改记录,应该说是Zenlib日记,
20060101
越来越和该死的进程,线程打交道,感觉要放弃原来考虑的不合ACE打交道
如果是一个的后台的库,不用ACE感觉基本不可能。犹豫

20060102
今天感觉日志类不完善,没有线程部分保护的东西,由于内部有自己的缓冲去,在多线程的情况下
肯定会出现问题,
去看了看ACE的策略日志类,也就研究了一下ACE的日志部分。
感觉ACE的封装也一般般,日志策略全部使用命令行作为初始化方式,我没有这个爱好
另外所有的时间戳也是调用API得到的,这个这个,其实查询时间的API是个不是个高效操作.
kingwang的评价有道理,ace压根就没想非常高效。只是一般高效。呵呵
不过还是按照自己的感觉封装一个ACE的日志策略类,
完了,既然打算用ACE,就抛弃那些自己写的跨平台的代码把。


20060315
看了C4A的服务器统计类,(rong,sonicmao)觉得是一个非常好的想法,所以偷师了。

20060610
加入了一个MYSQLProcess类,其实这个封装我的相当多的代码用过,不过为了在CGI的代码中间
偷懒,我都是每个LIB写一个类似的,
这次完整的封装一下,以后要改变写类似代码的习惯.

另外,决定将代码统一改为ACE UNIX风格.和bolanfan PK了一下午,虽然我们俩说的问题都是不是一个层面,
我还是认可统一规范的重要的,

20070904
好久没有改这个库了,前不久加入了一个PID文件的输出类,加了文件锁。终于看完了UNIX的记录锁
。也算有点收获,小小进步一下。

20110320
决定重构这个库,打算摆脱ACE,一方面是liangfeng不喜欢,一方面是我自己也觉得ACE有点重了,
本来打算投奔Boost,但是使用Boost的过程发现Boost离我心中的目标还非常遥远,我只有放弃了。
所以改动很多,包括增加OS适配层,重新改写日志模块,重新整理了大量代码。

20111030
大规模改写代码大致完成,改写断断续续,中间耗费时间持续了大约2个月,大部分是周末时间,特别是那个苦难的10.1长假,
但是bug还是很多,yunfeiyang,liangfeng,stevzhou,erray,佐助,等朋友都帮我修改了这套库,感谢他们帮我调试

2012年5月7日
修改了所有的卫哨定义。

2012年6月
zen_server_status监控的代码进行了改写,不再使用数组ID作为监控下标,而使用hash table作为idx,性能有所降低,
但兼容性要好很多。
djiang PK胜利。

201208
对于原来的依靠模版完成GUARD功能进行了反思,增加利用OO完成的锁功能。

20120920
这一年都在小规模的改写这个库,原来约有点味道了,至少像那么回事了。
9月BB出世,在陪产假期继续完善了一下库。改写部分Mutex部分,增加了一些新代码,比如SPIN的锁,Process的几个锁的封装。
增加了IPV6的支持,(虽然增加了,不知道什么时候才能测试)
增加了一些域名相关的代码。
增加了SYSTEM V的共享内存的跨平台支持,

201210
增加了random的代码。
增加了uuid的代码

20121108
今天中国著名的斯巴达召开了。哦喔喔。
增加了一些读取本机配置性能,进程性能的代码。
这些代码会增加我们监控的效果。
pascalshen帮助我修正了很多错误。

20130101
不再和原来公司的代码同步,保持自己的代码的唯一性。
主要为了避免未知的版权风险,把代码彻底独立独立出来,改名,



6.必须感谢的人,排名不分先后,
先后有很多兄弟们帮助我完善了这个库,特别是11年的改写后,由于时间不足,大量的测试工作是他们完成的。
scottxu, 很早贡献过一套共享内存红黑树代码
inmoreliu,linkerlin,帮助打过酱油,
sonicmao,rong,他们的很多代码我都参考过。
chrislin,贡献过很多类似boost的代码
chweiling,errayzhao,djiang,liangfeng,sasukeliu,stefzhou,yunfeiyang,pascalshen平台开发组的兄弟们,2011年的版本他们贡献良多,
yunfeiyang 在2011-2012一段时间一直在帮忙增加代码和帮忙改写我这个流氓种下的bug,
sriverxiao 帮我测试过多节hash

7.

About

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

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published