ACE框架[推荐||精品]

时间:2022-10-01 21:47:33
ACE是高度可移植的开放源码主机基础设施中间件工具包,并已得到了广泛的使用。你可以从 http://ace.ece.uci.edu/http://www.riverace.com/*获取其源代码。核心的ACE库大约包含了25万

行C++代码,由约500个类组成。其中的许多类相互协作,形成了ACE的主要框架。ACE工具包还包括了许多较高级的组件,以及大量的示例和大范围的自动regression test(退行测试)套件(退行测试是指在新模块被集成进系统中、测试所增加的功能时,重新测试先前测试过的功能,以确保新模块不会破坏系统——译注)。

如图1.7所示,为了划分事务、降低复杂性,并实现功能性的子集划分,ACE的设计使用了分层的架构[POSA1]。ACE所提供的功能跨越了OSI参考模型[Blas91]的会话、表示和应用层。ACE工具包的基础是其OS适配层和许多C++ wrapper facade的结合,它们共同封装了核心的OS网络编程机制,以在副栏2中所示的所有OS平台上可移植地运行。ACE的较高层在此基础上构建,以提供可复用的框架、网络化服务组件,以及基于标准的中间件。

1.4.2  ACE框架提要

ACE框架是一组集成的类,开发者可对其进行实例化和定制,以提供完整的网络化应用和服务组件。以“在经过良好测试、可复用的C++软件制品中包含专家经验”的形式,这些框架有助于将ACE

                       图为:ACE中的关键框架

副栏2:ACE所支持的OS平台

ACE可运行在诸多操作系统上,包括:

l  PC,例如,Windows(32和64位版本)、WinCE,以及Macintosh OS X

l  大多数版本的UNIX,例如,SunOS/Solaris、IRIX、HP-UX、Tru64 UNIX(Digital UNIX)、AIX、DG/UX、Linux(Redhat、Debian,以及SuSE)、SCO OpenServer、UnixWare、NetBSD,以及FreeBSD

l  实时操作系统,例如,VxWorks、ChorusOS、LynxOS、Pharlap TNT、QNX Neutrino和RTP、RTEMS,以及pSoS

l  大型企业系统,例如,OpenVMS、MVS OpenEdition、Tandem NonStop-UX,以及Cray UNICOS

我们可以使用这些平台上的所有主要的C++编译器来编译ACE。位于http://ace.ece.uci.edu的ACE网站含有完整的、最新的平台列表,以及怎样下载及生成ACE的指令。

 

开发者在数十年中积累的知识直接传递给ACE用户。ACE框架为编写并发的面向对象网络化应用实现了一种模式语言。图1.8说明ACE的各个框架。为了说明这些框架是怎样相互依赖、相互使用的,在各个方框之间使用了线和箭头来表示其依赖关系和方向。下面对各个框架进行概述。

ACE Reactor和Proactor框架  这些框架分别实现Reactor和Proactor模式[POSA2]。它们都是架构型模式,允许应用由“从一个或多个事件源递送到应用的事件”进行驱动;这些事件源中最为重要的是I/O端点。通过由事件发信号告知已可以开始同步操作,Reactor框架便利了反应式I/O(Reactive I/O)模型的使用。Proactor框架是为前摄式I/O(Proactive I/O)模型设计的,在其中一个或多个异步I/O操作被发起,每个操作的完成会触发一个事件。使用前摄式I/O模型可以获得并发的性能好处,而又不会带来并发的许多连带问题。Reactor和Proactor框架使“为响应许多类型的事件而进行的检测、多路分离,以及应用定义的处理器的分派”得以自动化。第3章和第4章描述ACE Reactor框架,第8章描述ACE Proactor框架。

ACE Service Configurator框架  该框架实现Component Configurator模式[POSA2],这种设计模式允许应用链接其组件实现,或解除其链接,而无需静态地修改、重编译,或是重链接应用。ACE Service Configurator框架支持这样的应用配置:其服务可在设计周期的后期,比如安装时和/或运行时,进行装配。具有高可用性需求的应用,比如进行在线交易处理或实时生产过程自动化的关键性系统,常常需要这样灵活的配置能力。第2章描述与配置网络化服务相关的设计维度,第5章描述ACE Service Configurator框架。

ACE Task框架  该框架实现多种并发模式,比如Active Object和Half-Sync/Half-Async [POSA2]。Active Object设计模式解除了“执行方法的线程”与“调用此方法的线程”的耦合。其目的是加强并发,并简化对驻留在自己的控制线程(Thread of Control)中的对象的同步化访问。Half-Sync/Half-Async是一种架构型模式,可以解除并发系统中的同步与异步处理的耦合,从而简化编程,而又不过度地降低性能。该模式结合了两个互通信层,一个用于异步服务处理,一个用于同步服务处理。排队层则协调异步和同步层中的服务之间的通信。C++NPv1的第5章描述了与并发的网络化应用相关联的设计维度,本书的第6章描述ACE Task框架。

ACE Acceptor-Connector框架  该框架有效地利用了Reactor框架,并使Acceptor-Connector模式[POSA2]得以具体化。该设计模式解除了“网络化系统中相互协作的各对等服务的连接和初始化”与“连接和初始化一旦完成后它们所进行的处理”的耦合。Acceptor-Connector框架解除了“主动的和被动的初始化角色”与“应用定义的服务处理”的耦合——这些处理由各通信对等端服务在初始化完成后进行。第7章描述这一框架。

ACE Streams 框架  该框架实现Pipes and Filters模式,这种架构型模式为处理数据流的系统提供了一种结构[POSA1]。ACE Streams框架简化了分层次的服务的开发和组合,比如用户级协议栈和网络管理代理[SS94]。第9章描述这一框架。

在协同使用时,上面所概述的ACE框架赋予了开发者开发这样的网络化应用的能力:无需修改/

ACE框架[推荐||精品]

             图  应用类库来开发和使用ACE框架

重编译、重链接,或是重启运行中的应用,就可以对它们进行更新和扩展。ACE是通过结合以下方法来获得这一空前的灵活性和可扩展性的:

l  OS机制  比如事件多路分离、IPC、动态链接、多线程、多进程,以及同步[Ste99]。

l  C++语言特性  比如模板、继承,以及动态绑定[Bja00]。

l  模式  比如Component Configurator[POSA2]、Strategy[GoF],以及Handler/Callback[Ber95]。

如表1.2所示,ACE框架通过回调提供了控制的反转:

表1.2

ACE框架

控制的反转

Reactor和Proactor

回调应用提供的事件处理器,以在事件同步或异步发生时进行处理

Service Configurator

回调应用提供的服务对象,以对其进行初始化、挂起(Suspend)、恢复(Resume),以及结束(Finalize)操作

Task

回调应用提供的挂钩方法,以在一个或多个控制线程中进行处理工作

Acceptor-Connector

回调服务处理器,以在它们被连接后对其进行初始化

Streams

当任务被推入和弹出流时进行回调,以对任务进行初始化和结束操作

ACE的框架中的回调方法被定义为C++虚方法。这一对动态绑定的使用允许网络化应用*地实现和扩展接口方法,而无需修改或重编译已有的框架类。相反,ACE wrapper facade很少使用回调或虚方法,所以其可扩展性不及ACE框架。但是,ACE Wrapper facade也支持广泛的使用情况,并可通过泛型编程[Ale01]技术集成在一起。泛型技术基于在副栏40中所概述的C++ traitstraits类惯用手法。

上图说明了在ACE中类库和框架为何是互补的技术。通过其容器类库——其中包括列表、队列、哈希表、字符串,以及其他可复用的数据结构——ACE工具包简化了其框架的实现。同样地,由ACE Reactor框架中的事件处理器所调用的应用定义的代码可以使用ACE wrapper facade和C++标准库类来执行IPC、同步、文件管理,以及字符串处理操作。副栏3描述了怎样生成(Build)ACE库,从而让你能够试验我们在本书中给出的示例。

副栏3:生成ACE及使用ACE的程序

ACE是开放源码软件,你可以从http://ace.ece.uci.eduhttp://www.riverace.com下载并自行生成ACE。这两个站点包含有许多其他的与ACE有关的材料,比如教程、技术论文,以及对没有在本书中涵盖的其他ACE wrapper facade和框架的综述。你还可以以极低的价格从Riverace购买ACE的预编译版本。Riverace所支持的预生成编译器和OS平台的列表,见http://www.riverace.com

如果你想要自行生成ACE,你应该下载ACE的发布文件,并将其解压到一个空目录中。发布文件的*目录名是ACE_wrapper。我们指称这个*目录为“ACE_ROOT”。你应该用这个名字创建一个环境变量,在其中包含*ACE目录的全路径。ACE源文件和头文件位于$ACE_ROOT/ace中。

在$ACE_ROOT/ACE-INSTALL.html文件中有生成ACE的全部指令,其中包括怎样为你的OS和编译器进行配置。本书的网络化日志服务示例的源文件和头文件位于$ACE_ROOT/examples/C++NPv2中,并且可以在ACE所支持的所有平台上生成。要生成你自己的程序,必须把$ACE_ROOT加到你的编译器的文件包含路径中。对于命令行编译器,可以通过-I或/I编译器选项来完成此工作。图形的IDE提供了类似的选项,比如MSVC++中,在Project Settings对话框上的C/C++选项卡的 “Preprocessor, Additional include directories”选项。