第1章 概述 1
1.1 体系集成需求 1
1.1.1 系统集成的问题 2
1.1.2 耦合性问题 2
1.1.3 复杂数据流问题 3
1.2 什么是数据分发服务 4
1.3 什么是中间件 5
1.4 网络通信模型 5
1.5 什么是“以数据为中心” 7
1.6 DDS对开发者有什么帮助 8
第2章 DDS架构 11
2.1 设计理念 12
2.2 可扩展的传输框架 12
2.2.1 以数据为中心的发布/订阅 14
2.2.2 数据本地重构层 15
2.3 DDS的发现 15
2.4 线程处理 17
2.5 配置 17
2.6 DCPS通信 17
2.6.1 DCPS通信概述 17
2.6.2 域和域参与者 21
2.6.3 数据写入者和发布者 23
2.6.4 数据读取者和订阅者 23
2.6.5 主题、实例与关键字 24
2.6.6 服务质量(QoS)策略控制通信行为 27
2.6.7 监听器 28
2.6.8 条件 28
第3章 数据类型和数据样本 29
3.1 数据类型概述 30
3.1.1 序列 31
3.1.2 字符串和宽字符串 31
3.1.3 类型代码 31
3.2 内置数据类型 32
3.2.1 注册内置类型 32
3.2.2 为内置类型创建主题 33
3.2.3 字符串内置类型 34
3.2.4 关键字字符串内置类型 36
3.2.5 管理内置数据类型的内存 39
3.2.6 内置数据类型的类型代码 41
3.3 使用IDL创建用户数据类型 42
3.3.1 可变长度类型 43
3.3.2 值类型 44
3.4 与用户数据类型动态互动 45
3.4.1 类型代码概述 45
3.4.2 定义新类型 46
3.5 使用数据样本 46
3.5.1 具体类型的对象 47
3.5.2 动态定义数据类型的对象 47
第4章 服务质量(QoS)策略 49
4.1 QoS策略概述 49
4.1.1 默认QoS策略 49
4.1.2 DEADLINE(截止期限(T,DR,DW)) 54
4.1.3 DESTINATION_ORDER(目标顺序(T,DR)) 54
4.1.4 DURABILITY(持久性(T,DR,DW)) 55
4.1.5 ENTITY_FACTORY(实体工厂(DP,Pub,Sub)) 56
4.1.6 GROUP_DATA(组数据(Pub,Sub)) 57
4.1.7 HISTORY(历史(T,DW,DR)) 58
4.1.8 LATENCY_BUDGET(时延预算(T,DR,DW)) 59
4.1.9 LIFESPAN(寿命(T,DW)) 61
4.1.10 LIVELINESS(活跃度(T,DW,DR)) 62
4.1.11 OWNERSHIP、OWNERSHIP STRENGTH(所有权(T)、所有权强度(DW)) 63
4.1.12 PARTITION(分割(Pub,Sub)) 64
4.1.13 PRESENTATION(呈现(Pub,Sub)) 65
4.1.14 READER_DATA_LIFECYCLE(读取者数据生命周期(DR)) 66
4.1.15 RELIABILITY(可靠性(T,DW,DR)) 67
4.1.16 RESOURCE_LIMITS(资源限制(T,DW,DR)) 68
4.1.17 TIME_BASED_FILTER(基于时间的过滤(DR)) 69
4.1.18 TOPIC_DATA(主题数据(T)) 69
4.1.19 TRANSPORT_PRIO)RITY(传输优先级(T,DW)) 70
4.1.20 USER_DATA(用户数据(T,DP,DR,DW)) 71
4.1.21 WRITER_DATA_LIFECYCLE(写入者数据生命周期(DW)) 72
4.1.22 DURABILITY_SERVICE(持久性服务(DW)) 72
4.1.23 OWNERSHIP_STRENGTH(所有权强度(DW)) 73
4.2 策略示例 73
第5章 实体 75
5.1 所有实体的一般操作 75
5.1.1 创建和删除实体 76
5.1.2 启用实体 76
5.1.3 获取实体的实例句柄 77
5.1.4 获取状态和状态改变 77
5.1.5 获取和设置监听器 78
5.1.6 获取状态条件 78
5.1.7 获取和设置服务质量策略 78
5.2 实体的服务质量策略 79
5.2.1 QoS请求vs.提供兼容性——RxO属性 79
5.2.2 C语言的特殊服务质量策略处理 80
5.3 通信状态 81
5.4 监听器实体 83
5.4.1 监听器的类型 83
5.4.2 创建和删除监听器 84
第6章 主题 86
6.1 主题概述 86
6.1.1 创建主题 86
6.1.2 删除主题 89
6.1.3 设置主题的服务质量策略 89
6.2 内容过滤主题 92
6.2.1 内容过滤主题概述 92
6.2.2 过滤器适用的地方——发布与订阅方 93
6.2.3 创建内容过滤主题 93
6.2.4 删除内容过滤主题 95
6.2.5 使用内容过滤主题 95
第7章 发送数据 96
7.1 发送数据的步骤 96
7.2 发布者 97
7.2.1 显式与隐式地创建发布者 97
7.2.2 创建发布者 100
7.2.3 删除发布者 101
7.2.4 设置发布者的服务质量策略 101
7.2.5 创建发布者监听器 107
7.2.6 寻找一个发布者的相关实体 108
7.2.7 等待应答 109
7.2.8 发布者状态 109
7.2.9 暂停和恢复发布 109
7.3 数据写入者 109
7.3.1 创建数据写入者 111
7.3.2 获取所有数据写入者 113
7.3.3 删除数据写入者 113
7.3.4 创建数据写入者监听器 113
7.3.5 检查数据写入者的状态 114
7.3.6 数据写入者的状态 115
7.3.7 使用一个类型特定数据写入者(FooDataWriter) 121
7.3.8 写入数据 122
7.3.9 刷新批量数据样本 124
7.3.10 写入相关数据样本组 124
7.3.11 等待应答 125
7.3.12 管理数据实例(使用关键字控数据类型) 125
7.3.13 设置数据写入者服务质量策略 128
7.3.14 实体间的导航关系 135
7.3.15 断言活跃度 136
第8章 接收数据 137
8.1 接收数据的步骤 137
8.1.1 接收数据的准备 137
8.1.2 使用一种机制接收数据 138
8.2 订阅者 139
8.2.1 显式与隐式地创建订阅者 141
8.2.2 创建订阅者 142
8.2.3 删除订阅者 143
8.2.4 设置订阅者服务质量策略 144
8.2.5 开始和终止组顺序的访问 149
8.2.6 设置订阅者监听器 149
8.2.7 用特定样本获取数据读取者 151
8.2.8 寻找一个订阅者的相关实体 152
8.2.9 订阅者的状态 152
8.3 数据读取者 153
8.3.1 创建数据读取者 155
8.3.2 获取所有数据读取者 157
8.3.3 删除数据读取者 157
8.3.4 建立数据读取者监听器 157
8.3.5 检查数据读取者状态和状态条件 158
8.3.6 等待历史数据 160
8.3.7 数据读取者的状态 160
8.3.8 设置数据读取者服务质量策略 168
8.3.9 实体间的导航关系 172
8.4 使用数据读取者访问数据(读取或获取) 173
8.4.1 使用类型指定数据读取者(FooDataReader) 173
8.4.2 借出和返回数据以及样本信息序列 174
8.4.3 用读取或提取访问数据样本 175
第9章 使用域 178
9.1 域和域参与者的基本原理 178
9.2 域参与者工厂 180
9.2.1 设置域参与者工厂QoS策略 181
9.2.2 获取和设置域参与者的默认QoS策略 182
9.2.3 释放域参与者工厂所用资源 183
9.2.4 查找域参与者 183
9.2.5 从QoS策略配置文件获取QoS策略值 183
9.3 域参与者 184
9.3.1 创建域参与者 187
9.3.2 删除域参与者 189
9.3.3 删除包括的实体 189
9.3.4 选择域ID和创建多个域 189
9.3.5 建立域参与者监听器 190
9.3.6 设置域参与者QoS策略 192
9.3.7 查找主题描述 197
9.3.8 寻找主题 197
9.3.9 获取隐式发布者或订阅者 198
9.3.10 断言活跃度 199
第10章 条件和监听器 200
10.1 条件和监听器概述 200
10.2 通信状态类型 200
10.2.1 主题状态类型 200
10.2.2 订阅者状态类型 201
10.2.3 数据读取者状态类型 201
10.2.4 数据写入者状态类型 203
10.3 定义监听器 205
10.3.1 主题监听器 206
10.3.2 数据写入者监听器 206
10.3.3 发布者监听器 207
10.3.4 数据读取者监听器 207
10.3.5 订阅者监听器 207
10.3.6 域参与者监听器 207
10.4 定义条件 208
10.4.1 状态条件 208
10.4.2 附加的条件类型 209
第11章 配置OpenDDS 210
11.1 配置方式 210
11.2 通用配置选项 211
11.3 发现配置 213
11.3.1 域配置 213
11.3.2 为DCPSInfoRepo配置应用程序 215
11.3.3 为DDS-RTPS发现配置 219
11.4 传输配置 221
11.4.1 传输配置概述 222
11.4.2 配置文件示例 222
11.4.3 传输注册示例 225
11.4.4 传输配置选项 225
11.4.5 传输实例选项 226
11.5 记录 232
11.5.1 DCPS层记录 232
11.5.2 传输层记录 233
第12章 开始使用 234
12.1 规定遵从 234
12.1.1 DDS规定遵从 234
12.1.2 DDS RTPS规定遵从 234
12.2 使用DCPS 235
12.2.1 定义数据类型 235
12.2.2 处理IDL 236
12.2.3 一个简单的消息发布者 238
12.2.4 建立订阅者 242
12.2.5 数据读取者监听器实行 244
12.2.6 清理OpenDDS客户端 246
12.2.7 运行示例 247
12.2.8 用RTPS运行示例 248
12.3 数据处理最佳化 250
12.3.1 在发布者中注册和使用实例 250
12.3.2 读取多个样本 250
12.3.3 零复制读取 251
12.4 构建一个应用程序 252
12.4.1 搭建开发环境 252
12.4.2 构建应用程序 253
12.4.3 数据类型定义 254
12.4.4 建立发布应用程序 256
12.4.5 建立订阅应用程序 263
12.4.6 运行应用程序 269
参考文献 275