ACE程序员指南:网络与系统编程的实用设计模式
基本信息
编辑推荐
可移植、灵活、可扩展、可预测、可靠、可负担——如果你正在设计这样的软件和系统,本书及ACE工具包将使得你在所有这些方面都变得更为得力。即使是用了十余年时间开发ACE,并用它构建了许多网络化软件应用之后,我发现我还是在这本书中学到了许多东西。我深信,你同样了会如此。
——Douglas C.Schmidt,ACE的发明者,录自本书前言
这是每一个ACE程序员的必备书籍。对于初学者而言,本书循序渐进地解释了ACE的入门之道。对于更有经验的程序员而言,它详细解释了每天都要使用的特性,同时它也是一本完美的参考手册。如果这本书早几年面世,我就会节省大量时间!
——Johnny Willemsen,荷兰Remedy IT公司高级软件工程师
在拥有大型的C++代码库后,我们依靠ACE来建立跨平台的客户——服务器框架,以保证数据的质量和完整性。ACE改善了我们的设计,消除了OS的各种特异行为,而又没有牺牲性能或灵活性。对我们而言,ACE的在线参考资料和印刷出版的“大图景(big picture)”指南是不可缺少的助手,而在我的办公室的书架上,这本书占据了最优先的位置。
——John Lilley,DataLeverCorporation首席科学家
在SITA空——地部门中,我们是为航空公司提供通信服务的主要供应者之一。我们在大约一年前开始使用ACE,现在正在把大部分新的与通信有关的开发工作移向ACE。可以说,在开发我们这种类型的应用时,这个工具包能减少至少50%的开发和测试时间。
——Jean Millo,SITA高级架构师
内容简介回到顶部↑
可移植、灵活、可扩展、可预测、可靠、可负担——如果你正在设计这样的软件和系统,本书及ace工具包将使得你在所有这些方面都变得更为得力。即使是用了十余年时间开发ace,并用它构建了许多网络化软件应用之后,我发现我还是在这本书中学到了许多东西。我深信,你同样了会如此。
——douglas c.schmidt,ace的发明者,录自本书前言
这是每一个ace程序员的必备书籍。对于初学者而言,本书循序渐进地解释了ace的入门之道。对于更有经验的程序员而言,它详细解释了每天都要使用的特性,同时它也是一本完美的参考手册。如果这本书早几年面世,我就会节省大量时间!
——johnny willemsen,荷兰remedy it公司高级软件工程师
在拥有大型的c++代码库后,我们依靠ace来建立跨平台的客户——服务器框架,以保证数据的质量和完整性。ace改善了我们的设计,消除了os的各种特异行为,而又没有牺牲性能或灵活性。对我们而言,ace的在线参考资料和印刷出版的“大图景(big picture)”指南是不可缺少的助手,而在我的办公室的书架上,这本书占据了最优先的位置。
——john lilley,datalevercorporation首席科学家
在sita空——地部门中,我们是为航空公司提供通信服务的主要供应者之一。我们在大约一年前开始使用ace,现在正在把大部分新的与通信有关的开发工作移向ace。可以说,在开发我们这种类型的应用时,这个工具包能减少至少50%的开发和测试时间。
——jean millo,sita高级架构师
adaptive communication environment(ace)是一个开放源码软件工具包,可以帮助你应对网络编程中的各种挑战。ace用c++编写而成,在30位核心开发者和1700位做出贡献的开发者的努力下,这个可移植的中间件已经演化成了一个强大的工具包,封闭并增强了广泛的原生os功能,从而能用于开发性能驱动的软件系统。
本书是一本实用的ace指南,其读者对象是构建网络化应用和下一代中间件的c++程序员。本书首先向初学者介绍ace,然后阐释怎样选择设计模式、框架以及ace,用最少的时间和努力生产出有效的、易于维护的软件系统。本书着重讨论了各种编程辅助手段、进程间能信(ipc)问题、进程及线程管理、共享内存、ace service configurator、定时器管理类、ace naming service以及其他更多内容。
作译者回到顶部↑
本书提供作译者介绍
James CE Johnson撰写了包含在ACE源码包中的在线教程。从20世纪80年代中期起,他就一直在软件行业工作;他使用过许多编程语言和软件框架。James目前是一家财富500强公司的高级软件工程师/架构师。
Umar Syyid是Brinkpoint Software的总架构师,该公司提供广泛的商业软件解决方案,许多方案都基于ACE.. << 查看详细
目录回到顶部↑
序
前言
第1部分 ace基础知识
第1章 ace简介
1.1 ace的历史
1.2 ace的优势
1.3 ace的组织结构
1.4 模式、类库和框架
1.5 把你的代码移植到多种操作系统
1.6 消除c++编译器之间的差异
1.7 同时使用窄字符和宽字符
1.8 到哪里寻求更多的信息和支持
1.9 小结
第2章 怎样构建ace并在你的程序中使用它
2.1 关于ace版本的说明
2.2 ace distribution指南
2.3 怎样构建ace
2.4 怎样在你的应用中包含ace
2.5 怎样构建你的应用
译者序回到顶部↑
那么对于许多开发者来说,问题或许已不在于是否应该使用ACE开发网络软件,而在于怎样尽快掌握它并实际应用它。有好些读者朋友曾给我写信,说ACE太难学了,我想,这并不是一件出人意料的事情--ACE的难学,恰恰反映了网络软件开发的困难,以及一些先进的设计思想的复杂和深奥。一个人只有在深入掌握了C++语言、面向对象编程、网络编程及设计模式等方面的基础知识,才能开始学习ACE。与此同时,尽管已经有了三本与ACE直接相关的书,尽管有了大量的中文技术文档(http://www.flyingdonkey.com/ace/),面对ACE这样一个庞大而复杂的开发包,你或许仍然会觉得资料不足。
没关系,现在有了本书。本书由ACE的几位核心开发者撰写,适用于ACE的初学者,也可供有经验的ACE开发者作参考手册用。本书从介绍ACE开始,循序渐进,详细地讨论了ACE的IPC设施、进程及线程管理以及一些高级的话题,比如共享内存、ACE Streams框架、ACEService Configurator框架、定时器管理类、ACE Naming Service,等等。在这个过程中,作者给出了许多源码例子,并做了详尽的解释。
有读者也许会产生这样的疑问:那么到底应该先阅读《C++ Network Programming》还是本书。我的看法是应该先阅读前者,即《C++ Network Programming》,原因是该书中给出了更多的概念性阐述;本书则更偏重于实践性的问题。
在本书末尾的"参考文献"中列出了一些与ACE有关的重要文献,比如网络编程著作之父Richard Stevens的一些著作,以及MINIX的发明者Andrew S.Tanenbaum的《计算机网络》,等等。如果你能"按图索骥",全面而深入地学习包括本书在内的所有这些文献,相信你一定能成为一名真正的"王牌"(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/IPSockets包装(wrapper)类开始,一直到怎样用ACE的Reactor(反应器)和Proactor(前摄器)框架同时处理多个sockets及其他事件,比如定时器和信号。第二部分还描述了ACE的Acceptor-Connector(接受器一连接器)框架,并在最后讨论了ACE提供的其他一些IPC包装类--这些类有许多都可用于替换所涵盖的框架中使用的TCP/IP包装类。
· 第三部分涵盖的是与ACE的进程及线程管理有关的广泛话题。这一部分解释了怎样使用ACE的进程管理类,怎样处理信号,接着又用三章讨论多线程化编程、线程管理以及线程安全和同步的关键内容。第三部分的最后将讨论Active Obiect(主动对象),以及使用ACE的线程池的各种方式--这是在高性能应用中有效使用多线程的关键所在。
· 第四部分涵盖高级的ACE话题:共享内存,用于装配模块化数据处理流的ACEStreams框架,以及怎样通过使用ACE Service Configurator(服务配置器)框架使你的应用更灵活、可配置性更好。第四部分的结尾将深入讨论ACE的定时器管理类和ACE Naming Service,后者是ACE的网络服务组件之一,这些组件的用途是为常用的网络化应用编程任务提供帮助。
在本书的最后给出了参考书目和详尽的主题索引。
本书采用的约定
所有的ACE类都以ACE_开头。当我们所指的是模式而不是实现它们的类时,我们会略去该前缀。例如,Reactor模式是由ACE_Reactor类实现的。
所有的类成员变量都以"_"为后缀。ACE源码采用了这一约定,我们也把它带到了本书的各个示例中。
致谢
我们应当感谢阅读并评论了整个手稿的评阅团队。Craigl Ching、Dave Mercer、JohnnyWillemsen以及Steven P.Witten提供了深刻而有益的反馈和意见,极大地改善了本书的质量。
我们还感谢世界各地的许多ACE用户社群成员,他们无偿地花费时间评阅许多份手稿,提供了有益的更正和建议。和许多为ACE自身作出贡献的人一样,这些人展示了许多开放源码开发者/用户社群的协作性--特别是以下这些ACE用户:Bill Cassanova、Ufuk Coban、ToddCooper、Ning Cui、Alain Decamps、John Fowler、Chris D.Gill、Kelly F.Hickel、Don Hinton、Robert Kindred、Michael Kleck、Franz Klein、Sven Koster、Dieter Knuppel、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、IrmaRastegayeva、Michael Searles、Rich Siebel、Chris Smith、Scott Smith、Edward Thompson、AlainTotouom、Bill Trudell以及Lothar Werzinger。
序言回到顶部↑
二十年来,计算与通信信息技术(information technology,IT)已经取得了长足的进步。各种语言、编程环境、操作系统、网络协议还有中间件已变得更为成熟,更为标准化。例如,C++已经成为ISO/ANSI标准,并正被用于广泛的应用领域。同样,UNIX、Windows和TCP/IP标准也已经无处不在。甚至像CORBA、.NET和J2EE这样的分布式计算中间件标准,也正日益为IT行业和最终用户所广泛接受。
但是,即使有了这些进步,在网络化软件设计空间中,仍然有一个层面--主机基础设施中间件(host infrastructure middleware),用于性能驱动的、多平台的、网络化和/或并发的软件系统--未能很好地得到位于其他抽象层面的标准解决方案的处理。在通过像Sockets或POSIX threads(Pthreads)这样的原生OS API开发网络化应用时,需要完成许多繁琐、易错和不可移植的工作,主机基础设施中间件封装了原生操作系统(OS)的并发和进程间通信(interprocess communication,IPC)机制,能使上述工作变得更为容易。性能驱动的系统还具有严格的服务质量(Quality of Service,QoS)需求。
对于以下类型的系统而言,为现在流行的各种计算环境提供主机基础设施中间件特别重要:(1)高性能计算系统,比如支持科学可视化、分布式数据库服务器以及在线金融交易的系统;(2)对现实世界的各种制品进行监控的分布式实时及嵌入系统,比如航空任务和飞行管制软件、监视控制与数据采集系统以及汽车制动系统;(3)必须可移植地跨越局域和广域网运行的多平台应用。这些类型的系统正日益受到以下趋势的影响:
. 为满足QoS需求而访问原生OS机制的需要。例如,对需要长时间、双向字节流通信服务的多媒体应用而言,传统的分布中间件提供的同步请求/响应模型并不适用。同样,许多分布式中间件实现会造成相当大的开销,并且缺少足够的挂钩(hook)用以操纵其他与QoS有关的属性,比如等待时间、吞吐量以及抖动。
. 苛刻的开销限制和巨大的推出时间压力。全球竞争和政府对市场干预的减少正在造成
内部开发和软件质量保证(quality assurance,QA)预算的缩减,特别是OS和中间件
基础设施软件。而且,受性能驱动的用户常常无法或不大情愿付钱购买特制的私有基
础设施软件。
. 用户需要自己进行定制。因为高性能软件常常会冲击技术的极限,这样的软件必须针对特定的运行时环境和应用需求进行优化。通用的全能型软件解决方案的性能常常无法让人接受。
随着这些趋势的发展速度的继续加快,给今后的网络化软件系统的开发者带来了许多挑战。特别地,为了在今天这样竞争激烈、快速变化的IT行业中取得成功,成功的中间件和应用软件必须展现出以下八个特征:
1.可负担性(affordability),确保软件采购和演化(evolution)的总开销不会高得惊人
2.可扩展性(extensibility),支持连续的快速更新和扩展,从而满足新的需求和占领新兴的市场
3.灵活性(flexibility),支持范围不断扩展的数据类型、传输流以及端到端(end-to-end)QoS需求
4.可移植性(portability),减少在异种OS平台和编译器上支持各种应用所需的工作量
5.可预测性和高效性(predictability and efficiency),给对延迟敏感的实时应用提供低等待时间、给有高带宽要求的应用提供高性能,并在像无线链接这样的低带宽网络上提供可用性
6.可靠性(reliability),确保应用健壮、容错
7.可伸缩性(scalability),使应用有能力同时处理大量客户
8.可信性(trustworthiness),在互连的系统中确保完整性、机密性和可用性
在过去二十年间,在开发许多研究性及产品性的、性能驱动的软件系统时,我遇到过所有这些挑战。1992年,为了应对并发网络编程的各种挑战,我开始开发一个名为ADAPTIVECommunication Environment(ACE)的软件工具包。ACE是一个用C++编写的、可移植的面向对象主机基础设施中间件,当时的设计目标是要解决非常实际的问题--为我的博士论文项目的实现节省时间,论文的主题是在SunOS4.x和SunOS 5.x操作系统上实现并行协议处理引擎。在此之前的几年里,我已经参与过若干自由软件项目的开发,因此我立刻就意识到,以开放源码的形式发布ACE将有助于创立一个社群,其他开发者和用户可以藉此在QA、文档和支持方面提供帮助,从而把ACE转化为高质量、产品级的软件工具包。
共有35人开贴评论 51人参与评论 28人参与打分 查看



本书的作者Addison Wesley/Pearson 是一个非常值得尊敬的程序员.
译者马维达也是国内值得称道的职业翻译家, 很多资料都以免费的方式提供了出来,光这点足以让人钦佩.
对于读者,我建议对ACE有一定了解欲望的人买来参考阅读.最好能自己编译尝试所有的例子.
对于本书的翻译质量,我觉得为中上,译者很多地方使用直译的方式,造成了部分中文的难以理解.总体应该可以给4星半,给5星是表示对于马先生辛勤劳动的肯定.播种不易.
| 我要写评论 |
| 查看所有评论交流(共35条) |


点击看大图




加载中...
