ACE简介

  • 格式:doc
  • 大小:109.50 KB
  • 文档页数:9

ACE全称是ADAPTIVE Communication Environment,其中ADAPTIVE 的全称是 A Dynamically Assembled Protocol Transformation, Intergration, and eValuation Environment,它是一个非常优秀的工具包,可以用于构建高性能、跨平台的网络应用,本页介绍了在Windows 和Linux 下安装ACE 的方法。

另外,这里记录了一些滇狐学习、应用ACE 的笔记。

在正式开始使用ACE 之前,我们必须先编译ACE。

首先到ACE 的官方站点下载ACE 的源码包,然后解压到一个你喜欢的目录,为编译做好准备。

Linux 下编译ACE 很简单,就是一部标准的三部曲,唯一不同的是,ACE 不允许在代码解压的根目录下执行./configure,你必须创建一级子目录,然后在子目录中../configure:mkdir objdircd objdir../configuremakesudo make install当滇狐最开始接触ACE 的时候,ACE 还没有使用autoconf,由于编译脚本的一些bugs,当时编译ACE 有一系列古怪的步骤。

滇狐把当时做的笔记放在这里,感兴趣的考古爱好者可以看看。

为了在Windows 下编译ACE,我们必须先安装一份MinGW 和MSys,这两个软件都可以到MinGW 的官方站点免费下载。

使用昂贵的Visual Studio 编译ACE 的方法我们这里不再进行讨论。

首先安装MinGW,然后再安装MSys,安装完毕后,将ACE 的源码包解压到某个目录,然后打开MSys 控制台,切换到ACE 所在的路径。

注意,MSys 使用的路径表示方式与Windows 不大一样,它使用正斜杠“/”作为路径分隔符,并且把驱动器名看做根目录下的文件夹。

例如,我把ACE 解压到E:\ACE_wrapper 下,在MSys 中的写法是:/e/ACE_wrapper。

设置$ACE_ROOT环境变量,把该环境变量指向你解压ACE 后得到的最上层目录,如果你把ACE 解压到了其它目录,请修改下面提到的路径。

$ export ACE_ROOT=/e/ACE_wrapper接下来,我们进入$ACE_ROOT/ace目录,创建一个文本config.h,内容如下:#include "ace/config-win32.h"切记!虽然该目录下有一个config-win32-mingw.h,但这里不要使用它,否则编译时会出错!然后,我们进入$ACE_ROOT/include/makeinclude目录,创建一个文本文件platform_macros.GNU,内容如下:include$(ACE_ROOT)/include/makeinclude/platform_mingw32.GNU然后回到$ACE_ROOT 目录,执行make,经过漫长地等待后,ACE 就编译好了。

我不记得Windows 下是否出现过Linux 下类似的提前依赖ACE 库的事件,而我现在手头上没有Windows,如果你遇到类似的问题的话,参照Linux 下编译的方法进行处理。

需要注意的一点是,安装MSys 时,它会把你的MinGW 中的make.exe改名为mingw32-make.exe,这样在编译的时候便会使用MSys 中被包装过的make.exe,以便正常识别Unix 风格的路径名。

当编译完毕后,为了能够正常使用MinGW,请把被修改的文件名改回来。

当然,在再次使用MSys 的时候,记得再将make.exe改名。

Stephen D. Huston、James CE Johnson 和Umar Syyid 写的The ACE Programmer’s Guide, Practical Design Patterns for Network and System Programming是一本非常不错的ACE 参考书,中文译本《ACE 程序员指南,网络与系统编程的实用设计模式》,封面如下,可到China-Pub购买。

ACE简介一、ACE综述ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework),在其中实现了许多用于并发通信软件的核心模式。

ACE提供了一组丰富的可复用C++ Wrapper Facade(包装外观)和框架组件,可跨越多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态(重)配置、并发执行和同步,等等。

ACE的目标用户是高性能和实时通信服务和应用的开发者。

它简化了使用进程间通信、事件多路分离、显式动态链接和并发的OO网络应用和服务的开发。

此外,通过服务在运行时与应用的动态链接,ACE还使系统的配置和重配置得以自动化。

ACE正在进行持续的改进。

Riverace公司()采用开放源码商业模式对ACE进行商业支持。

此外,ACE开发组的许多成员目前正在进行The ACE ORB(TAO,/~schmidt/TAO.html)的开发工作。

二、使用ACE的好处使用ACE的好处有:增强可移植性:在ACE组件的帮助下,很容易在一种OS平台上编写并发网络应用,然后快速地将它们移植到各种其他的OS平台上。

而且,因为ACE是开放源码的自由软件,你无需担心被锁定在特定的操作系统平台或编译器上。

更好的软件质量:ACE的设计使用了许多可提高软件质量的关键模式,这些质量因素包括通信软件灵活性、可扩展性、可复用性和模块性。

更高的效率和可预测性:ACE经仔细设计,支持广泛的应用服务质量(QoS)需求,包括延迟敏感应用的低响应等待时间、高带宽应用的高性能,以及实时应用的可预测性。

更容易转换到标准的高级中间件:TAO使用了ACE提供的可复用组件和模式。

它是CORBA 的开发源码、遵循标准的实现,并为高性能和实时系统作了优化。

为此,ACE和TAO被设计为能良好地协同工作,以提供全面的中间件解决方案。

三、ACE的结构和功能下图显示了ACE中的关键组件以及它们的层次关系:图中的结构和各层的组成部分描述如下。

四、ACE OS适配层该层直接位于用C写成的本地OS API之上。

它提供轻型的类POSIX OS适配层,将ACE 中的其他层及组件和以下与OS API相关联的平台专有特性屏蔽开来:并发和同步:ACE的适配层封装了用于多线程、多进程和同步的OS API。

进程间通信(IPC)和共享内存:ACE的适配层封装了用于本地和远地IPC、以及共享内存的OS API。

事件多路分离机制:ACE的适配层封装了用于对基于I/O、定时器、信号和同步的事件进行同步和异步多路分离的OS API。

显式动态链接:ACE的适配层封装了用于显式动态链接的OS API。

显式动态链接允许在安装时或运行时对应用服务进行配置。

文件系统机制:ACE的适配层封装了用于操作文件和目录的OS文件系统API。

ACE OS适配层的可移植性使得ACE可运行在许多操作系统上。

ACE已在广泛的OS平台上进行了移植和测试,包括Win32(也就是,在Intel和Alpha平台,使用MSVC++、Borland C++ Builder和IBM Visual Age的WinNT 3.5.x、4.x、2000、Win95/98和WinCE)、Mac OS X、大多数版本的UNIX(例如,SPARC和Intel上的Solaris 1.x和2.x、SGI IRIX 5.x和6.x、DG/UX、HP-UX 9.x、10.x和11.x、DEC/Compaq UNIX 3.x和4.x、AIX 3.x和4.x、UnixWare、SCO,以及可自由使用的UNIX实现,比如Debian Linux 2.x、RedHat Linux 5.2、6.x和7.x、FreeBSD和NetBSD)、实时操作系统(比如,LynxOS、VxWorks、Chorus ClassiX 4.0、QnX Neutrino、RTEMS和PSoS)、MVS OpenEdition和CRAY UNICOS。

由于ACE的OS适配层所提供的抽象,所有这些平台使用同一棵代码树。

这样的设计极大地增强了ACE的可移植性和可维护性。

此外,还有Java版本的ACE可用(/~eea1/JACE.html)。

五、OS接口的C++ Wrapper Facade可以直接在ACE OS适配层之上编写高度可移植的C++应用。

但是,大多数ACE开发者使用的是上图中所示的C++ Wrapper Facade层。

通过提供类型安全的C++接口(这些接口封装并增强本地的OS并发、通信、内存管理、事件多路分离、动态链接和文件系统API),ACE Wrapper Facade简化了应用的开发。

应用可以通过有选择地继承、聚合和/或实例化下面的组件来组合和使用这些包装:并发和同步组件:ACE对像互斥体和信号量这样的本地OS多线程和多进程机制进行抽象,以创建高级的OO并发抽象,像主动对象(Active Object)和多态期货(Polymorphic Future)。

IPC和文件系统组件:ACE C++包装对本地和/或远地IPC机制进行封装,比如socket、TLI、UNIX FIFO和STREAM管道,以及Win32命名管道。

此外,ACE C++包装还封装了OS文件系统API。

内存管理组件:ACE内存管理组件为管理进程间共享内存和进程内堆内存的动态分配和释放提供了灵活和可扩展的抽象。

ACE C++包装提供了许多与ACE OS适配层一样的特性。

但是,这些特性是采用C++类和对象、而不是独立的C函数来构造的。

这样的OO包装有助于减少正确地学习和使用ACE 所需的努力。

例如,C++的使用提高了应用的健壮性,因为C++包装是强类型的。

所以,编译器可在编译时、而不是运行时检测类型系统违例。

相反,不到运行时,不可能检测像socket或文件系统I/O这样的C一级OS API的类型系统违例。

ACE采用了许多技术来降低或消除额外的性能开销。

例如,ACE大量地使用C++内联来消除额外的方法调用开销;这样的开销可由OS适配层和C++包装所提供的额外的类型安全和抽象层次带来。

此外,对于性能要求很高的包装,比如socket和文件I/O的send/recv方法,ACE会避免使用虚函数。

六、框架ACE还含有一个高级的网络编程框架,集成并增强了较低层次的C++ Wrapper Facade。

该框架支持将并发分布式服务动态配置进应用。