很久以前笔者也不太熟悉ACE
C++网络通信框架,偶然的机会逐渐接触后,发现它的优良!
总结来看它的有点如下
- 非常适合后台无界面网络通信的系统编程
适合小型化核心网使用;但值得注意,如果您需要的是web领域技术栈,则JAVA等框架则更为适合
- 可以跨多种OS平台
虽然现在,在Linux系统几乎主宰了服务器的时代,这个特点并不算什么,但是,在_“七国八制”_的时代,后台代码工程能具有此种特点,还是非常节省气力的。特别地,您仍可以在windows调试完代码,然后部署到Linux上去运行,也还是非常节省气力的。
注:以前很多项目为了实现windows可调试工程,还是费了不少力气,ACE框架可以让你事半功倍
- 半成品代码,框架提供了主要的骨干组件,开发者仅需关注业务逻辑即可
框架相对于设计模式来讲,在更大尺度结构上提供了复用,使得它在特定领域可以成为
领域语言
,具有通用性。相比更局限在细部的编程规范,如果使用框架的一致,保持技术栈保持一致性,项目在这方面也可以节省不少气力
ACE_Task模板类自带线程能力和消息队列,对于编程中多线程协作非常有利。可以比较方便地扩展出JOB编程,在一个ACE_TASK中通过队列消息,派发到所管理的JOB任务中进行调度执行
- 默认提供了高效的实现
我们知道在程序中,必须使用特定的算法或者数据结构,才能提供在理论上和实际运行中的高 效。而一般程序员对于此种深度的计算机科学知识积累往往欠缺,所以,能不发明轮子,就直接复用轮子好了
在笔者最初深入研究ACE定时器实现时,发现定时器的底层默认使用“最小堆”的堆排序数据结构;后来求证于其它实现,例如,JAVA定时器实现、libevent等定时器实现,发现也是用此种数据结构。
最小堆是定时器的通用解决方案,但一般人不一定一下子就想得到。
- 优良的设计模式实践
在ACE中实践了很多设计模式,可以根据代码实现,研究和学习设计模式
-
优良的API接口实现
对于常见的setter和getter类接口,ACE借助C++的重载技术,提供了非常统一的另外一种设计思想,也非常友好可读。例如,在ACE_Time_Value中msec属性的设置和获取的接口设计
对于各种扩展,提供了大量默认参数值。具有默认值的参数,统一全部靠右
-
模板扩展实现偏序化
在ACE中大量使用模板进行扩展,相比较于接口扩展,模板扩展,对于扩展提供了更弱的要求。只要叫声像鸭子,就可以将其看成鸭子。在这点上,接口扩展定死了使用规范要求,而用模板的话,则可以要求的更宽泛一点