目录
简介
DDS制定了一个能在分布式应用的多个参与者之间有效分发数据的服务。此服务不是专用于CORBA的。该规范提供了平台无关模型(PIM)和将PIM映射到CORBA IDL 实现的特定平台模型(PSM)。对于更多的有关DDS的细节问题,开发者应该参考DDS规范(OMG Document formal/2015-04-10),因为其中包含了所有服务特征的进一步说明。OpenDDS是OMG DDS规范的开源C++实现,该规范是由OCI公司进行商业支持和开发的。OpenDDS可以通过网址http://www.opendds.org/downloads.html进行下载,并且能够与OCI TAO1.6a,2.0a和2.2a版本的最新补丁以及最新发行的DOC版本兼容。
1.1. 概述
在本节,我们将介绍有关DCPS层的主要概念和实体,并讨论他们之间如何相互作用以及协同工作的。
1.1.1 基本概念
下图显示了DDS DCPS层的概述。
1.1.1.1 域
域是DCPS中的基本分区单元。 每个其他实体属于一个域,只能与同一域中的其他实体进行交互。 应用程序代码可以自由地与多个域进行交互,但必须通过属于不同域的单独实体进行交互。
1.1.1.2 域的参与者
域参与者是应用程序在特定域内进行交互的入口点。 域参与者是编写或读取数据所涉及的许多对象的工厂。
1.1.1.3 主题
主题是发布和订阅应用程序之间交互的基本方式。 每个主题在域中都有一个唯一的名称发布具有特定类型的数据。可以将主题发布的数据类型制定成消息的键。 发布数据时始终指定主题。 订阅者通过该主题请求数据。 在DCPS术语中,可以为主题上的不同实例发布单个数据样本。 每个实例都与**的唯一值相关联。 发布数据时通过根据样本使用的键值在同一实例上发布多个数据样本。
1.1.1.4 数据写入器
发布应用程序代码使用数据写入器将值传递给DDS。 每个数据写程序都绑定到特定主题。 该应用程序使用数据编写器的特定于类型的接口来发布该主题的示例。 数据编写者负责编组数据并将其传递给发布者以进行传输。
1.1.1.5 发行方
发布者负责获取已发布的数据并将其传播到域中的所有相关订阅者。 采用的确切机制留给服务实现。
1.1.1.6 订阅方
订阅方从发布者接收数据并将其传递给与其连接的任何相关数据读取器。
1.1.1.7 数据读取器
数据读取器从订阅方获取数据,将其解析为该主题的相应类型,并将对应的消息传递给应用程序。 每个数据读取器都绑定到特定主题。 应用程序使用数据读取器的特定于类型的接口来接收样本。
1.1.2 标题的内置
DDS规范定义了DDS实现中内置的许多主题。 订阅这些内置主题使应用程序开发人员能够访问所使用的域的状态,包括注册哪些主题,连接和断开哪些数据读取器和数据写入器,以及各种实体的QoS设置。 订阅时,应用程序会收到指示域内实体更改的样本。
下表显示了DDS规范中定义的内置主题:
1.1.3 服务质量政策
DDS规范定义了许多应用程序使用的服务质量(QoS)策略,以指定其对服务的QoS要求。 参与者指定他们从服务中需要的行为,服务决定如何实现这些行为。 这些策略可以应用于各种DCPS实体(主题,数据写入器,数据读取器,发布者,订阅者,域参与者),但并非所有策略都适用于所有类型的实体。订阅者和发布者使用请求与提供(RxO)模型进行匹配。 订阅者请求一组最低要求的策略。 发布者向潜在订阅者提供一组QoS策略。 然后,DDS实施尝试将所请求的策略与提供的策略进行匹配; 如果这些政策兼容,则形成关联。
1.1.4 监听者
DCPS层为每个实体定义回调接口,允许应用程序进程“监听”某些状态更改或与该实体有关的事件。 例如,当有可供读取的数据值时,将通知数据读取器侦听器。
1.1.5 条件
条件和等待集允许侦听器在检测DDS中感兴趣的事件时使用另一种方法。一般模式是应用程序创建特定类型的条件对象,例如StatusCondition,并将其附加到WaitSet。
•应用程序在WaitSet上等待,直到一个或多个条件成立为止。
•应用程序调用相应实体对象上的操作以提取必要信息。
•DataReader接口还具有采用ReadCondition参数的操作。
•QueryCondition对象是作为ContentSubscription配置文件实现的一部分提供的。 QueryCondition接口扩展了ReadCondition接口。