第0章 设计课题、中间件方案、ACE 1
0.1 网络应用面临的挑战 1
0.2 网络应用的设计空间 5
0.3 面向对象中间件方案 7
0.4 ACE工具包概览 12
0.5 示例:一个网络日志服务程序 17
0.6 小结 19
第1篇 面向对象网络编程 21
第1章 通信设计空间 23
1.1 无连接协议与面向连接协议 23
1.2 同步及异步消息交换 26
1.3 消息传递与共享内存 28
1.4 小结 31
第2章 Socket API概述 33
2.1 操作系统IPC机制概述 33
2.2 Socket API 34
2.3 Socket API的局限性 37
2.4 小结 43
第3章 ACE Socket Wrapper Facade 45
3.1 概述 45
3.2 ACE_Addr类和ACE_INET_Addr类 49
3.3 ACE_IPC_SAP类 52
3.4 ACE_SOCK类 54
3.5 ACE_SOCK_Connector类 56
3.6 ACE_SOCK_IO类和ACE_SOCK_Stream类 60
3.7 ACE_SOCK_Acceptor类 64
3.8 小结 68
第4章 网络日志服务程序的实现 71
4.1 概述 71
4.2 ACE_Message_Block类 72
4.3 ACE_InputCDR类和ACE_OutputCDR类 76
4.4 日志服务器的初始版本 80
4.5 客户程序 95
4.6 小结 99
第2篇 并发式面向对象网络编程 101
第5章 并发设计空间 103
5.1 循环、并发及反应式服务器 103
5.2 进程与线程 109
5.3 进程/线程创建策略 112
5.4 用户、核心及混合线程模型 114
5.5 分时及实时调度级别 119
5.6 “基于任务”与“基于消息”的体系 121
5.7 小结 123
第6章 操作系统并发机制概述 125
6.1 同步事件多路分离 125
6.2 多进程机制 127
6.3 多线程机制 129
6.4 同步机制 130
6.5 OS并发机制的局限性 135
6.6 小结 137
第7章 ACE同步事件多路分离Wrapper Facade 139
7.1 概述 139
7.2 ACE_Handle_Set类 141
7.3 ACE_Handle_Set_Iterator类 147
7.4 ACE::select()方法 151
7.5 小结 157
第8章 ACE进程Wrapper Facade 159
8.1 概述 159
8.2 ACE_Process类 161
8.3 ACE_Process_Options类 165
8.4 ACE_Process_Manager类 169
8.5 小结 182
第9章 ACE线程Wrapper Facade 185
9.1 概述 185
9.2 ACE_Thread_Manager类 187
9.3 ACE_Sched_Params类 198
9.4 ACE_TSS类 201
9.5 小结 205
第10章 ACE同步Wrapper Facade 207
10.1 概述 207
10.2 ACE_Guard类 209
10.3 ACE互斥体类 212
10.4 ACE Readers/Writer Lock类 218
10.5 ACE信号量类 222
10.6 ACE条件变量类 229
10.7 小结 233
附录A ACE C++Wrapper Facade的设计原则 235
A.1 概述 235
A.2 通过Wrapper Facade增强类型安全性 236
A.3 简化常见情形 238
A.4 通过继承结构提高设计的清晰性和可扩充性 246
A.5 尽可能地隐藏平台间的差异 248
A.6 针对效率实施优化 255
A.7 小结 257
附录B ACE的过去、现在和将来 259
B.1 ACE的演变 259
B.2 未来之路 267
B.3 结束语 268
术语表 269
参考文献 285
索引 293
图0.1 独立应用体系 2
图0.2 一个普通的网络应用环境 3
图0.3 网络应用的设计空间 6
图0.4 应用环境下的面向对象中间件层次 8
图0.5 ACE的层次化体系结构 13
图0.6 网络日志服务的参与者 18
图1.1 可选的连接多路复用策略 25
图1.2 同步及异步消息交换策略 26
图1.3 消息传递与共享内存 29
图2.1 Socket空间分类图 42
图3.1 ACE面向连接的Socket类关系图 47
图3.2 ACE Socket Wrapper Facade分类图 48
图3.3 ACE Socket Wrapper Facade中的角色 49
图3.4 ACE_Addr和ACE_INET_Addr类图 51
图3.5 ACE_IPC_SAP和ACE_SOCK类图 54
图3.6 ACE_SOCK_Connector类图 57
图3.7 ACE_SOCK_Stream和ACE_SOCK_IO类图 62
图3.8 ACE_SOCK_Acceptor类图 65
图4.1 ACE_Message_Block类图 73
图4.2 两种ACE_Message_Block 75
图4.3 ACE_InputCDR和ACE_OutputCDR类图 79
图4.4 日志服务器示例类 81
图4.5 日志记录信息的消息块链 90
图5.1 循环式/反应式服务器与并发式服务器 104
图5.2 多进程与多线程 109
图5.3 线程池“急式创建”策略 113
图5.4 “一个请求一个线程”式的“随需创建”策略 113
图5.5 N:1与1:1线程模型 115
图5.6 N:M混合线程模型 117
图5.7 “基于任务”与“基于消息”的并发体系 122
图7.1 ACE_Handle_Set和ACE_Handle_Set_Iterator类图 140
图7.2 反应式日志服务器的结构 153
图8.1 ACE进程管理类关系图 160
图8.2 ACE_Process类图 163
图8.3 ACE_Process_Options类图 167
图8.4 ACE_Process_Manager类图 170
图8.5 多进程日志服务器的结构 171
图8.6 主进程/工作者进程的创建顺序(POSIX) 174
图8.7 主进程/工作者进程的创建顺序(Win32) 174
图9.1 ACE Thread_Manager类图 189
图9.2 “一个连接一个线程”日志服务器的结构 192
图9.3 ACE_Sched_Params类图 200
图9.4 ACE_TSS类图 203
图10.1 ACE_LOCK*伪类 209
图10.2 ACE_Guard系列类图 210
图10.3 ACE_Condition_Thread_Mutex类图 230
图10.4 ACE_Recursive_Thread_Mutex类图 231
图A.1 SocketAPI中的函数 247
图A.2 ACE IPC地址的继承结构 248
图B.1 基于ACE且符合标准的中间件 264