随着计算机网络、设备和系统的持续发展,软件工程师面临一个独特的挑战:在不断变化的环境中创建可靠的分布式应用。《C++网络编程,卷1》就此提供了实用、有效的方案:运用ADAPTIVE通信环境(ACE)——一个可以运行在数十个硬件平台和操作系统上、具有创造性的开放源码框架一来开发和优化复杂的分布式系统。 \r\n 本书指导软件专业人员如何在开发高效、可移植、灵活的网络应用程序时避免陷阱和错误。它剖析了并发式网络应用固有的设计复杂性,以及克服这些复杂性时必须作出的权衡。\r\n 《C++网络编程》以一则概论开篇,介绍了撰写分布式并发应用程序时涉及的议题和工具。然后,针对开发灵活、高效的并发式网络应用程序的需要,本书提供了重要的设计空间、模式和原则。本书作者从专家角度向你展示,在运用C++和模式效地开发面向对象网络应用时,应当如何提高你的设计技能。\r\n 读者可以在书中看到以下内容: \r\n ·C++网络编程技术, 包括一篇概论和许多解决常见开发问题的策略 \r\n ·ACE工具包 \r\n ·连接协议、消息交换、消息传递与共享内存 \r\n ·可复用网络应用服务的实现方法 \r\n ·面向对象网络编程中的并发技术 \r\n ·ACE wrapper facades的设计原则和模式 \r\n 有了这本书,C++开发者就有了一套最完整的、可以自如运用的工具包,从而能够方便、 高效地开发成功的、 多平台、并发式网络应用程序。
图表一览 \r\n序 \r\n译序 \r\n关于本书 \r\n 第0章 设计课题. 中间件方案. ACE \r\n 0. 1 网络应用面临的挑战 \r\n 0. 2 网络应用的设计空间 \r\n 0. 3 面向对象中间件方案 \r\n 0. 4 ACE工具包概览 \r\n 0. 5 示例:一个网络日志服务程序 \r\n 0. 6 小结 \r\n第1篇 面向对象网络编程 \r\n 第1章 通信设计空间 \r\n 1. 1 五连接协议与面向连接协议 \r\n 1. 2 同步及异步消息交换 \r\n 1. 3 消息传递与共享内存 \r\n 1. 4 小结 \r\n 第2章 Socket API概述 \r\n 2. 1 操作系统IPC机制概述 \r\n 2. 2 SocketAPI \r\n 2. 3 SocketAPI的局限性 \r\n 2. 4 小结 \r\n 第3章 ACE Socket Wrapper Facade \r\n 3. 1 概述 \r\n 3. 2 ACE_Addr类和ACE_INET_Addr类 \r\n 3. 3 ACE_IPC_SAP类 \r\n 3. 4 ACE_SOCK类 \r\n 3. 5 ACE_SOCK_Connector类 \r\n 3. 6 ACE_SOCK_IO类和ACE_SOCK_Stream类 \r\n 3. 7 ACE_SOCK_Acceptor类 \r\n 3. 8 小结 \r\n 第4章 网络日志服务程序的实现 \r\n 4. 1 概述 \r\n 4. 2 ACE_Message_Block类 \r\n 4. 3 ACE_InputCDR类和ACE_OutputCDR类 \r\n 4. 4 日志服务器的初始版本 \r\n 4. 5 客户程序 \r\n 4. 6 小结 \r\n第2篇 并发式面向对象网络编程 \r\n 第5章 并发设计空间 \r\n 5. 1 循环. 并发及反应式服务器 \r\n 5. 2 进程与线程 \r\n 5. 3 进程/线程创建策略 \r\n 5. 4 用户. 核心及混合线程模型 \r\n 5. 5 分时及实时调度级别 \r\n 5. 6 “基于任务”与“基于消息”的体系 \r\n 5. 7 小结 \r\n 第6章 操作系统并发机制概述 \r\n 6. 1 同步事件多路分离 \r\n 6. 2 多进程机制 \r\n 6. 3 多线程机制 \r\n 6. 4 同步机制 \r\n 6. 5 OS并发机制的局限性 \r\n 6. 6 小结 \r\n 第7章 ACE同步事件多路分离Wrapper Facade \r\n 7. 1 概述 \r\n 7. 2 ACE_Handle_Set类 \r\n 7. 3 ACE_Handle_Set_Iterator类 \r\n 7. 4 ACE::select()方法 \r\n 7. 5 小结 \r\n 第8章 ACE进程Wrapper Facade \r\n 8. 1 概述 \r\n 8. 2 ACE_Process类 \r\n 8. 3 ACE_Process_Options类 \r\n 8. 4 ACE_Process_Manager类 \r\n 8. 5 小结 \r\n 第9章 ACE线程Wrapper Facade \r\n 9. 1 概述 \r\n 9. 2 ACE_Thread_Manager类 \r\n 9. 3 ACE_Sched_Params类 \r\n 9. 4 ACE_TSS类 \r\n 9. 5 小结 \r\n 第10章 ACE同步WrapperFacade \r\n 10. 1 概述 \r\n 10. 2 ACE_Guard类 \r\n 10. 3 ACE互斥体类 \r\n 10. 4 ACEReaders/Writer Lock类 \r\n 10. 5 ACE信号量类 \r\n 10. 6 ACE条件变量类 \r\n 10. 7 小结 \r\n附录A ACE C++Wrapper Facade的设计原则 \r\n A. 1 概述 \r\n A. 2 通过Wrapper Facade增强类型安全性 \r\n A. 3 简化常见情形 \r\n A. 4 通过继承结构提高设计的清晰性和可扩充性 \r\n A. 5 尽可能地隐藏平台间的差异 \r\n A. 6 针对效率实施优化 \r\n A. 7 小结 \r\n附录B ACE的过去. 现在和将来 \r\n B. 1 ACE的演变 \r\n B. 2 未来之路 \r\n B. 3 结束语 \r\n术语表 \r\n参考文献 \r\n索引
为本书作序之时, 我正在欧洲畅游. 这多亏了欧洲完善的公共交通设施. 作为一个美国人, 我不禁被这里的基础设施所倾倒. 无论在什么地方, 只要我一下飞机, 就可以方便地找到火车或巴士, 享受快速. 整洁. 安全. 准时的服务——或许, 更重要的是:将我直接送到目的地. 此外, 离站和到站的通告用多种语言表示, 各种标志和指示也易于理解, 即使是我这样一个不懂当地语言的人, 也没有感到丝毫不便.
我生活. 工作在Boston. 和大多数美国人一样, 我几乎完全靠自己的汽车辗转于各个场所. 除了偶尔光顾一下Boston的地铁系统之外, 我总是自己开车外出, 因为公共交通设施有太多的限制, 它很难将我送到目的地. 数百万Boston居民以及其他地方的人们也都处于同样的困境. 可见, 我们的公路系统已经过时, 远不能承受今天的交通量. 我知道, 如果仔细算一算自己一生中因为塞车而浪费的时间, 一定会吓一跳.
有趣的是, 网络计算系统(networked computing system)和交通系统之间有某些相似之处, 其中最显著的一点是:二者的成功都离不开“可伸缩(scalable)”的基础设施. 所谓可伸缩的交通系统, 不只包括那些显而易见的设施, 如火车和铁轨. 飞机和机场, 还需要有调度. 路线选择. 维修. 检票. 监控, 而这一切还要能够随着物理上的交通系统的变化而伸缩. 变化. 类似地, 网络计算不仅需要主机和网络——物理上的计算和通信基础设施——还需要软件上的调度. 路由选择. 分发. 配置. 转译. 验证. 授权和监控——只有这样, 网络系统才能根据需要调节. 变化.
说到基础设施, 有这样一个具有讽刺意味的事实:建设好基础设施, 这本身已经非常之难, 但更难的是, 只有让用户越感觉不到它的存在, 人们才会认为它越成功. 举个例子:瑞士境内的阿尔卑斯山脉地势崎岖, 但是, 为数不多的设计师. 工程人员和建筑工人却凭借他们的技能, 为无数的瑞士居民提供了有效的交通系统, 从而给他们的日常生活带来了便利. 事实上, 这套系统如此可靠易用, 以至于你很快将它的存在当成是理所当然之事. 它因此变得对你透明了. 譬如, 当你踏上瑞士的铁路之旅时, 你的心思只会放在该从哪一个地方到达另一个地方上, 而不会关心是什么样的交通工具将你载到那儿. 除非你是个游客, 否则, 你大概不会注意到你正在穿越一个历经数年设计. 修建的隧道, 也不会注意到火车正攀行在如此陡峭的斜坡上, 更不会注意到铁路上还安装了齿轨, 以帮助列车爬行. 铁轨设施完美地承担了它的职能, 所以, 你甚至没有注意到它的存在.
本书针对网络计算系统, 探讨了一种基础设施软件(infrastructure software), 通常称为中间件(middleware入之所以称之为“中间件”, 是因为它就像是“沙漏的腰(waist in the hourglass)”, 位于操作系统和网络之上. 应用程序之下. 中间件具有多种形态(shapes). 规模(sizes)和能力(capabilities):从J2EE应用服务器. 异步消息处理系统. CORBA ORB, 到小型嵌入式系统中的Socket监控软件. 中间件必须支持日益繁多的应用程序. 操作系统. 网络协议. 编程语言和数据格式. 如果没有中间件, 要想应对网络计算系统中日益增长的多样性(diversity)和异种性(heterogeneity), 将十分麻烦, 而且容易出错且代价昂贵.
中间件种类繁多, 要解决的问题也各式各样, 但在解决各种复杂难题时, 不同类型的中间件往往采用相同的模式(patterns)和共同的抽象(abstractions). 例如, 如果去窥探一个具有可伸缩性和灵活性的应用程序服务器. 消息系统或CORBAORB的内部, 就会发现, 它们采用了类似的技术来完成诸如连接管理. 并发. 同步. 事件多路分离. 事件处理程序分发. 错误记录. 监控等任务. 如同瑞士铁路系统的用户数量远远大于设计和建造铁路的工程人员的数量那样, 一套成功的中间件的用户数量也远远大于设计和构造中间件的开发人员的数量. 如果要设计. 构造或使用中间件, 那么, 只有熟悉. 理解和运用这些常见模式和抽象, 才会获得成功.
虽然很多人都知道, 中间件必须具有可伸缩性和灵活性, 但很少有人能够高效地提供这种中间件. 然而, Doug Schmidt和Steve Huston在本书介绍的ADAPTIVE通信环境(ACE)中却做到了这一点. ACE是一套应用广泛的C++Xi具包, 它汇集了很多常用的模式和抽象, 这些模式和抽象在各种极为成功的中间件和网络程序中都有广泛的应用. ACE已经成为许多网络计算系统的基础:从实时的航空电子应用到CORBAORB, 以及对主机“端对端(peer-to-peer)”通信的支持.
和其他所有优秀的中间件一样, ACE也将异种环境下各式各样的复杂性隐藏在底层:和其他众多基础设施中间件不同的是:ACE能够在程序需要的任何地方提供最大的灵活性, 但不会损及系统的性能或可伸缩性. 作为一名长期从事中间件开发工作的设计师, 我清楚地知道, 要想在同一个软件包中兼顾性能和灵活性, 难度该有多大!
但从某种意义上说, ACE在灵活性和性能上的优越表现没有出乎我的意料. 和Doug的长期合作让我清楚地知道, 他无愧于这个领域的先锋. 当今各种具有可伸缩性. 高性能和灵活性的中间件, 都明显地留下了他的痕迹, 并深受他的影响. Steve是一位天才的C++开发者和作家, 他的工作使ACE多年来取得了长足进步. Doug和Steve联手, 为所有设计. 构造. 甚至使用中间件的人奉献了一部“必读”之作. 万维网(World Wide Web)和互连嵌入式系统(interconnected embedded systems)的日益普及, 意味着网络计算系统的数量. 规模和重要性将持续增长. 只要理解了Doug和Steve在书中讲述的重要模式. 技术. class(类)和经验教训, 我们就有希望创建出完全透明. 高效. 可靠的中间件基础设施.
Steve Vinoski
总设计师兼副总裁, Platform Technologies
IONA Technologies
2001年9月
Douglas C.Schmidt博士,ACE的早期开发者。他是University of California,Irvine的一位副教授,主要研究分布式实时中间件及嵌入式中间件的模式和优化技术。他是前C++Report主编,C/C++Users Journal专栏作家,《Pattern Languages of Program Design》(Addison-Wesley,1995)编者之一。
Stephen D.Huston,Riverace Corporation总载、CEO,为ACE用户提供技术支持和咨询服务。Steve具有五年多ACE使用经验和二十多年软件开发经验,主要从事多种软硬件环境下的网络协议和C++网络应用程序的开发。
於春景,软件工程师,1993年毕业于中南工业大学计算机科学系,有近十年专业软件开发经验,《MoreExceptional C++中文版》、《C++设计新思维》等书译者。