ACE(ADAPTIVE Communication Environment),中文的意思就是自适配通讯环境,ACE是一个用于开发网络程序的优秀的C++的框架,在国外有很广泛的使用,在国内一些大的开发通讯产品的公司也有使用。我接触ACE也有一段时间了,虽然时间不长,但我还是感觉到ACE确实是一个好东西,对于丰富自己的知识面有很大的帮助。虽然我们项目目前是采用C语言来开发,但是当接触ACE后,你会发现“喔,原来程序还可以这样”。例如:我觉得ACE里面Reactor框架就是一个非常的东西,我们在开发网络程序的时候,常常采用poll来监视各种网络事件,但当采用该框架后,你现在只是需要关系你的业务逻辑,当发生特定的网络事件后,框架会回调你的业务逻辑。其实按照这个思路,我们完全可以用C来实现类似的功能,当你完成这个后,你会发现你原来用C语言写的过程风格的代码竟然有了OO的味道。
ACE确实是好东西,但也不是能轻松的就能掌握的,我们还需要一步一步的来蚕食这个大象。
万丈高楼平地起,首先我们还是了解一下ACE的目录结构,从整体上对ACE有一个认识,为今后的进一步学习打下一个基础。
解开ACE的压缩包后,你会发现一个ACE_wrappers目录,这个目录也就是ACE的HOME目录,它下面还包含着一些子目录:
ace:这个目录是ACE中最重要的目录,它包含了ACE的所有源码,但遗憾的是,ACE的所有源文件和头文件全部杂乱的堆在这个目录里,这可能也是很多开源软件的缺点。其实ACE的代码完全可以按照不同的功能进行不同目录的划分,例如:Reactor框架和thread框架代码完全可以划分开,我想一个代码组织良好的ACE,将会给大家的学习带来极大的好处,我将在后面的文章里给出ACE代码划分的方法;
ACEXML:这个目录包含了用ACE实现的一个XML解析器;
apps:这个目录包含了用ACE来实现的一些较大的应用程序,例如:JAWS,一个WEB服务器;
ASNMP:基于ACE的SNMP协议实现;
bin:包含里用例方便开发的perl脚本程序,例如:在WIN32上开发DLL时候,需要导出DLL的接口;
docs:ACE的一些帮助文档,其中ACE-subsets.html文档,对我们划分ACE的代码有很大的帮助;
examples:是用ACE来编写的一些例子程序,方便更好的学习和理解ACE;
include:也是ACE中一个比较重要的目录,它包含了在不同的平台上编译时候的编译规则,库的编译规则等;
netsvcs:一些基于ACE的在分布式系统中常用的程序,例如:分布式系统日志系统,网络锁,时间同步等;
TAO:基于ACE的实时CORBA实现,TAO在分布式系统中使用相当广泛,也是一个不可多得的好资源;
tests:用来对ACE进行回归测试,也提供了一个学习ACE的很好的例子代码;