本书由ACE的几位核心开发者撰写,快速而直接地解释了怎样充分利用ACE。从介绍ACE开始,循序渐进,详细讨论了ACE的IPC设施、进程及线程管理以及一些高级话题,比如共享内存、ACE Streams框架、ACE Service Configurator框架、定时器管理类、ACE Naming Service等等。在这个过程中,作者给出了许多源码例子,通过贯穿全书的ACE应用实例来告诉读者如何应用各种关键的模式和设计原则,去成功地开发面向对象的网络化软件。通过本书的学习,你将能更好地设计并实现性能驱动的、无法在市场上买到的网络化软件,从而始终在竞争中走在前列。
译者序\r\n序\r\n前 言\r\n第1部分 ACE基础知识\r\n 第1章 ACE简介 \r\n 第2章 怎样构建ACE并在你的程序中使用它 \r\n 第3章 使用ACE日志设施 \r\n 第4章 收集运行时信息 \r\n 第5章 ACE容器 \r\n第2部分 进程间通信\r\n 第6章 基本的TCP/IP Socket用法 \r\n 第7章 处理事件及多个I/O流 \r\n 第8章 异步I/O与ACE Proactor框架 \r\n 第9章 其他IPC类型 \r\n第3部分 进程与线程管理\r\n 第10章 进程管理 \r\n 第11章 信号 \r\n 第12章 基本的多线程编程 \r\n 第13章 线程管理 \r\n 第14章 线程安全与同步 \r\n 第15章 主动对象 \r\n 第16章 线程池 \r\n第4部分 ACE高级特\r\n 第17章 共享内存 \r\n 第18章 ACE Streams框架 \r\n 第19章 ACE Service Configurator框架 \r\n 第20章 定时器 \r\n 第21章 ACE Naming Service \r\n参考书目
Stephen D.Huston是Riverace Corporation的总裁,向希望有效使用ACE开发项目的公司提供技术支持和咨询服务.他是《C++Network Programming》卷1及卷2的作者之一。
前言 ACE(ADAPTIVE Communication Environment)是一个强大的C++工具包,能帮助你在更轻松、更迅速地开发可移植、高性能的应用,尤其是网络化和/或多线程化应用的同时,拥有更多的灵活性及更少的错误数量。同时,因为ACE具有先进的设计与框架,与其他开发途径相比,你可以用少得多的代码做到所有这些事情。我们使用ACE已有多年,发现它对我们很有帮助,值得你付出任何代价。更好的是,它是自由软件!一直以来,许多开发者为使用ACE所要付出的代价,是克服陡峭的学习曲线。这是一个大工具包,具有大量功能。直到最近,最好的文档一直是源码(当然可以自由获取)和一批由ACE的研发人员撰写的学术论文(只有高级专业人员和高年级学生才有能力研究)。这样的学习障碍使得ACE的力量、易用与优雅成了软件开发中隐藏最深的秘密之一。这正是我们为何如此兴奋地撰写这本书的原因!它将使ACE的学习曲线变得平缓,并把ACE的力量、优雅及各种能力带给所有人。本书将告诉你与ACE有关的以下内容:它的一些历史及开发方式、它的组织方式、怎样着手使用它,以及怎样使用它的一些更为高级的能力。我们将在本书中告诉你怎样以“ACE方式”做各种事情,但我们不可能让本书成为一本参考大全。你应该通过本书着手学习ACE,并开始在你的工作中使用它。如果你已经有了一点使用ACE的经验,那么书中描述的有些功能,你可能并未见过,所以对于有经验的ACE用户而言,这本书同样也会很有用。谁应当阅读本书我们既想使本书成为ACE初学者的入门指南,也想使它成为有经验的ACE用户的快速参考资料。如果你是ACE初学者,我们建议你从头开始依次阅读各章。如果你是有经验的用户,知道自己想要阅读什么,你可以快速地找到所需的部分,而无需阅读前面的章节。本书是为这样的C++程序员撰写的:你已经接触过某些更高级的C++特性,比如虚继承和类模板。你还应该接触过你计划使用的操作系统所提供的各种基本设施。例如,如果你计划编写使用TCP/IP sockets的程序,你至少应该熟悉创建sockets、建立连接及传输数据的一般方式。对于那些从事教学工作的人而言,本书也是一个极好的资料来源:无论是商业培训还是高校教学。就怎样设计面向对象软件、怎样使用C++设计和编写高性能且易于维护的软件系统而言,ACE是一个极好的范例。篇章安排本书是一本关于怎样有效地使用ACE的实用指南。书中的许多源码示例将阐释怎样适当地使用所描述的ACE功能。我们尽量让源码示例保持简短,并切中问题的关键。有时,为了使读者的注意力集中在某个话题上,我们对源码作了删节。所有示例的完整源码可在随书附带的光盘上找到,也可在Riverace公司的网站上下载。在附带的光盘上还包含了ACE源码包的副本、针对许多流行平台编译好的可安装版本以及ACE的所有类的完整参考文档。本书在起始部分讲述了许多ACE用户都需要了解的基本功能,并进而在此基础上加以延伸,描述各种把行为抽象进强大模式中的更高级特性。 · 第一部分介绍ACE,并提供与ACE提供的设施有关的一些一般性的有用信息。第一部分还解释怎样配置并构建ACE,以及怎样构建你的ACE应用。另外还将描述被广泛使用的编程辅助功能(比如日志与跟踪、命令行处理与配置访问),以及ACE的容器类。 · 第二部分讨论ACE的进程间通信(IPC)设施——从基本的、低级的TCP/IP Sockets包装(wrapper)类开始,一直到怎样用ACE的Reactor(反应器)和Proactor(前摄器)框架同时处理多个sockets及其他事件,比如定时器和信号。第二部分还描述了ACE的Acceptor-Connector(接受器—连接器)框架,并在最后讨论了ACE提供的其他一些IPC包装类——这些类有许多都可用于替换所涵盖的框架中使用的TCP/IP包装类。 · 第三部分涵盖的是与ACE的进程及线程管理有关的广泛话题。这一部分解释了怎样使用ACE的进程管理类,怎样处理信号,接着又用三章讨论多线程化编程、线程管理以及线程安全和同步的关键内容。第三部分的最后将讨论Active Object(主动对象),以及使用ACE的线程池的各种方式——这是在高性能应用中有效使用多线程的关键所在。 · 第四部分涵盖高级的ACE话题:共享内存,用于装配模块化数据处理流的ACE Streams框架,以及怎样通过使用ACE Service Configurator(服务配置器)框架使你的应用更灵活、可配置性更好。第四部分的结尾将深入讨论ACE的定时器管理类和ACE Naming Service,后者是ACE的网络服务组件之一,这些组件的用途是为常用的网络化应用编程任务提供帮助。在本书的最后给出了参考书目和详尽的主题索引。本书采用的约定所有的ACE类都以ACE_开头。当我们所指的是模式而不是实现它们的类时,我们会略去该前缀。例如,Reactor模式是由ACE_Reactor类实现的。所有的类成员变量都以“_”为后缀。ACE源码采用了这一约定,我们也把它带到了本书的各个示例中。致谢我们应当感谢阅读并评论了整个手稿的评阅团队。Craig L. Ching、Dave Mercer、Johnny Willemsen以及Steven P. Witten提供了深刻而有益的反馈和意见,极大地改善了本书的质量。我们还感谢世界各地的许多ACE用户社群成员,他们无偿地花费时间评阅许多份手稿,提供了有益的更正和建议。和许多为ACE自身作出贡献的人一样,这些人展示了许多开放源码开发者/用户社群的协作性——特别是以下这些ACE用户:Bill Cassanova、Ufuk Çoban、Todd Cooper、Ning Cui、Alain Decamps、John Fowler、Chris D. Gill、Kelly F. Hickel、Don Hinton、Robert Kindred、Michael Kleck、Franz Klein、Sven Köster、Dieter Knüppel、Theo Landman、Mark Levan、Alexander Libman、John Lilley、Stephen McDonald、Mike Mullen、Mats Nilsson、Jaroslaw Nozderko、Rick Ohnemus、Wojtek Pilorz、Sunanda C. Prasad、Dietrich Quehl、Irma Rastegayeva、Michael Searles、Rich Siebel、Chris Smith、Scott Smith、Edward Thompson、Alain Totouom、Bill Trudell以及Lothar Werzinger。在本书漫长的撰写过程中,Addison-Wesley的编辑团队给了我们极大的帮助和鼓励。感谢我们的编辑:Marina Lang、Debbie Lafferty、Peter Gordon及Bernie Gaffney。感谢我们的文字编辑Evelyn Pyle,是Evelyn完成了一项令人惊叹的工作,把我们的不同方法和风格塑造成了统一的整体。非常感谢我们的制作协调人Elizabeth Ryan,她运用自己了不起的技能、雅致和耐心,帮助完成了全部三本与ACE有关的书籍。 Steve的致谢与我在所有工作中所感受到的感激一样,我深深地感谢我伟大的妻子Jane,为她在本书漫长的撰写过程中所给予的持续的爱、不变的支持以及我极其需要的帮助。你的牺牲远远超出了任何人应当做到的程度,你真的是上帝赐予我的礼物——谢谢你!正如智慧的所罗门曾经说过的:“著书多,没有穷尽;读书多,身体疲倦。”(《传道书》12:12,NIV)我有一点疲倦,感谢上帝给了我完成本书所需的精力。我还要感谢我已故的母亲Karen L. Anderson,我想,我终于学到的经验会让她满意的。 James的致谢我要感谢我的妻子Karla和我的儿子Riley(他是在本书四年的撰写过程中出生的),感谢他们在我每次长达数小时地消失在地下办公室中时所给予我的耐心和理解。没有他们的不断支持和鼓励,我想我肯定不会走到这里。我还要感谢我的父母,他们总是鼓励我尽自己最大的努力,鼓励我永不在“第二好”的地方停下来。最后,感谢Doug Schmidt,是他在多年前创造了ACE,给予了我们撰写这本书的机会。 Umar的致谢首先我要感谢我的妻子Ambreen和我的儿子Hassan。如果不是为了他们,我也许会把我的几乎所有时间用在计算机上;谢谢你们打电话让我回家。我应该特别感谢Ambreen,感谢她多年来忍受我的喋喋不休。没有她的支持,我连一页文字也写不出来。我还要感谢我的母亲,感谢她在我生活中非常艰难的时刻鼓励我、支持我。此外,我还要感谢我的父亲,是他使我想向他证明:我能够做到。最后,感谢Doug Schmidt驱车来到伊利诺依州立大学,主持了一次研究生研讨会,从而使我知道了一个叫作ACE的框架。结束语这本书是真正的合著,我们每个人都撰写了数量相等的内容。因此,如果你在文本中发现任何问题,我们都应该同等地承受责备。无论你发现了什么,都请将其发送至ACE用户邮件列表(ace-users@cs.wustl.edu),或发送给我们(ace-tutorial@tragus.org)。撰写一本主题像ACE这样广泛的书籍是非常困难的任务。我们拥有一个作者团队这一事实使得这项任务容易了许多。此外,来自DOC组织和ACE用户社群的帮助也展示出了无法估量的价值。 Steve Huston James CE Johnson Umar Syyid