糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 【DDS】DDS与OpenDDS

【DDS】DDS与OpenDDS

时间:2021-10-01 06:35:27

相关推荐

【DDS】DDS与OpenDDS

DDS与openDDS

DDS

什么是DDS?

Data Distribution Service(DDS),根据字面理解就是数据分发服务。这套服务,在分布式应用环境下,可以高效率地分发参与者(应用)间的数据信息。订阅/发布体系结构

考虑到应用实现,肯定要定一套体系结构。DDS采用订阅/发布体系结构,以数据为中心,也就是通过订阅/发布这个结构来实现消息(数据)的交换。P/S与RTPS

上面说的订阅/发布,从通信角度考虑。其实,就是P/S通信模式。P(Publish)是发布者,S(Subscribe)是订阅者,订阅者订阅发布者提供的某些服务后,P与S间就存在了通信关系。P发布了相应的消息后,订阅者便可以收到这些消息(数据)。

RTPS又是什么?

RTPS指Real Time Publish/Subscribe,它继承自P/S模型。简单来说,相比P/S,RTPS多出了QoS属性(Quality of Service)、将发布/订阅模块化等等优点。

因此,OMG将RTPS标准化为:DDS的实施互操作协议。OMG

一个组织,全名为Object Management Group。DDS就是OMG这个组织规定的规范。全局数据空间

DDS以数据为中心,也就是基于数据去考虑如何分发消息。因此在DDS中存在全局数据空间的概念。这个全局数据空间是虚拟(逻辑)上的,所有数据都在这个空间中,每个分布式结点可以向这个空间写数据,也可以从这个空间读数据。

这个空间可以总结为三点:All Data、Read and Write、Cache。

DCPS

OMG将RPTS重定义为DCPS,DDS采用DCPS通信机制。DCPS主要组成有:

Domain : 域。参与者只有在同一个域内,才可以通信。不同域间,不可通信。DomainParticipant: 域参与者。一个域的入口点。Topic:主题。只有使用相同主题(主题名)的P和S,才能够通信。DataWriter:数据写入者,负责向Publisher写入消息。Publisher:发布者,负责发布DataWriter写入的消息。Subscriber:订阅者,负责接收已订阅的消息。DataReader数据读取写,负责处理从Subscriber接收的消息。

DLRL与DCPS

DDS规范定义了两类Interfaces结构

DCPS:DDS核心,数据分布基础架构。

DLRL(A Data Local Reconstruction Layer):更高的抽象接口层,隐藏细节实现。其实,Data Local Reconstruction可以理解为将App与DDS直接的数据,根据应用环境重构为需要的格式。

OpenDDS

根据OpenDDS(目前最新版本是3.14)官网开发者手册中的介绍

OpenDDS is an open source implementation of the OMG Data Distribution Service (DDS) for

Real-Time Systems Specification v1.4 (OMG Document formal/-04-10) and the Realtime Publish-Subscribe Wire Protocol DDS Interoperability Wire Protocol Specification

(DDSI-RTPS) v2.3 (OMG Document formal/-04-03). OpenDDS also implements the

DDS Security Specification v1.1 (OMG Document formal/-04-01).

因此OpenDDS,是DDS规范的实现。当然还有其他一些DDS规范的实现。例如:RTI DDS、OpenSplice DDS。OpenDDS框架:下图为OpenDDS官网给出的Framework图。可以看出,主要部分为Topic、Transport、Discovery。也就是,数据如何定义?如何传输信息?如何发现两端(P/S)?

OpenDDS Topic:根据IDL,定义Topic结构,利用OpenDDS提供的工具,根据IDL文件自动生成主题文件。例:/adver1991/DDS-Example/blob/master/Messenger.idlOpenDDS Transport: OpenDDS提供了多种传输协议,TCP、UDP、Multicast、Shared-Memory、RTPS_UDP。使用者可以通过配置文件,指定使用的传输协议。

OpenDDS Discovery

DDS应用在分布式环境中,订阅者和发布者两端,如何发现对方?OpenDDS提供了两种节点寻找方式:

DCPSInfoRepo(默认):一个集中式的仓库,相当于发现中心,它需要运行在独立的进程中(例:P端一个进程,S端一个进程,还需要一个进程运行InfoRepo)。

RTPS:使用RTPS协议,点对点,不需要额外的进程运行其他服务。

使用OpenDDS

平台(Ubuntu 16.4)下载解压安装报,根据官网提示操作即可。/quickstart/GettingStartedLinux.html例子(参考自OpenDDS官网开发手册2.1.3节),使用RTPS发现方式,使用rtps_udp传输协议。这里只给出代码,代码中具体的含义请参考OpenDDS开发者手册。代码见:

/adver1991/DDS-Example关于例子的简单说明:例子中,包括订阅者、发布者、数据写入者、数据读取者(包含Listener)、Topic(IDL定义)部分。根据IDL文件,使用OpenDDS提供的工具,生成Topic相关的代码。订阅者与发布者,在同一个域内,使用相同的主题(主题名)实现数据的分发。

参考

OpenDDS官网OpenDDS开发者手册

DDS系列

【DDS】DDS与OpenDDS

【DDS】DDS-RPC通信机制

【DDS】基于OpenDDS的DDS-RPC实现

【DDS】DDSI-RTPS规范

如果觉得《【DDS】DDS与OpenDDS》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。