forked from sailzeng/zcelib
One cplusplus C++ crossplatform library use for develop server,similar to ACE.
License
kevin1sMe/zcelib
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
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 0
No packages published