OpenDDS学习笔记(3):OpenDDS概述_opendds的qos-程序员宅基地

技术标签: OpenDDS  


一、DCPS概述

1.1 基本组成

PIM平台框架结构

  • 域(Domain)
    域是DCPS内部最基本区分单元。每个实体必须属于某一个域,并且只能在相同域中与其他实体进行相互作用。应用程序代码可以通过实体自由地与多个域进行相互作用。
  • 域参与者(DomainParticipant)
    域参与者是应用程序入口点,以方便在特定域中进行交互。域参与者是写入或读取数据多个对象的工厂。
  • 主题(Topic)
    主题是发布、订阅应用程序之间进行交互作用的根本手段。每个主题在域里面都有一个独特的名称以及它发布的一个具体数据类型。发布数据时,发布过程总是指定主题。订阅者通过主题请求数据。在DCPS模型中,使用者可以通过不同实例发布相同主题的数据样本。
  • 数据写入者(DataWriter)
    发布应用程序通过数据写入者把数值传递给DDS。每个数据写入者必须是一个特定的主题。应用程序使用数据写入者指定类型的接口,在主题上发布例子。数据写入者负责对数据编码,并传递到发布者处准备传输。
  • 发布者(Publisher)
    发布者负责获取所发布的数据,并且把它分发到域中所有相关订阅者处。采用的准确机制由服务实现决定。
  • 订阅者(Subscriber)
    订阅者从发布者处接受信息,并递送到任何与它相连的、相关的数据读取者上。
  • 数据读取者(DataReader)
    数据读取者从订阅者处获取数据,将主题解码到适当类型中,然后把样本递送到应用程序处。每个数据读取者必须是一个特定的主题。应用程序使用数据读取程序的特定类型接口,便于接收样本。

1.2 内置主题

DDS规范定义了许多主题,这些主题被嵌入到DDS实现中。订阅这些嵌入式主题,使应用程序开发人员能访问正在被使用的域的状态,包括哪个主题被注册,哪个DataReader、DataWriter被连接以及被断开,以及各种各样实体的QoS设置。当被订阅时,应用程序接收样本,而这些样本指示在域内部、实体中所发生的改变。下表为DDS中定义的嵌入式主题。

主题名称 描述
DCPS 参与者 每个实例代表了一个域参与者
DCPS 主题 每个实例代表了一个标准的(不是嵌入式的)主题
DCPS 发布 每个实例代表了一个DataWriter
DCPS 订阅 每个实例代表了一个DataReader

1.3 QoS策略

DDS规范定义了许多QoS策略,应用程序利用这些策略,指定它们对于服务质量QoS的要求。参与者指定:从服务中,需要什么行为。同时,服务也决定了如何实现这些行为。这些策略可应用到DCPS的所有实体中(比如主题、DataWriter、DataReader、发布者、订阅者、域参与者),但对于所有所有实体类型而言,不是所有的策略均有效。
通过使用请求-提供(Request-Offered,RxO)模式,可以把订阅者和发布者进行匹配。订阅者请求一组最低程度需求的策略。发布者向潜在的订阅者提供一组QoS策略。然后DDS的实现利用所提供的策略,开始尝试匹配提出的策略;如果兼容,形成关联。

1.4 Listener

DCPS层为每个实体定义了一个回调接口,便于应用程序进程可以侦听(Listeners)关于那个实体的某些状态改变或者事件。例如,当不存在可以读取的可用数据时,就会通知DataReader。

1.5 条件

条件(Condition)和等待集(WaitSet)能够为Listeners在DDS中检测感兴趣的事件提供选择。一般模式为:

  • 应用程序创建一种特定的Condition对象,比如状态条件,并附加到一个WaitSet上。
  • 应用程序在WaitSet上等待,直到一个或多个条件为true。
  • 应用程序在相应的实体对象上进行调用,以便于提取必要信息。
  • DataReader接口也具有带有读取条件参数的操作。
  • 提供查询条件对象,以作为订阅内容配置文件实现的一部分。查询条件接口扩展了条件参数接口。

二、OpenDDS实现

2.1 兼容性

2.1.1 DDS兼容性

DDS规范定义了DDS实现的5点兼容性:

  • 最小的配置文件。
  • 内容-订阅配置文件。
  • 持久性配置文件。
  • 所有权配置文件。
  • 对象模型配置文件。

OpenDDS符合DDS规范的整个DCPS层,而且包括带有以下注释说明的所有QoS实现:

  • 只有在使用TCP,IP多点发送传输,或者RTPS_UDP传输时,才支持RELIABILITY.kind=RELIABLE。
  • 由于QoS可变,所以没有实现TRANSPORT_PRIORITY。

2.1.2 DDS-RTPS兼容性

OpenDDS还没有实现的项目:

  • 非默认生存性(LIVELINESS)QoS。
  • 写入程序方面的内容过滤。
  • 关于表示(PRESENTATION)QoS的相干集合。
  • 直接地写入。
  • 属性列表。
  • 关于持久性(DURABLE)数据的写入信息。
  • 不生成键杂凑值,但是可选择。
  • wait_for_acknowledgements()函数方法。
  • nackSuppressionDuration以及heartbeatSuppressionDuration。

2.2 OpenDDS架构

2.2.1 设计原理

OpenDDS实现是在OMG IDL PSM严格解释说明的基础上的。几乎所有的案例中,OMG C++语言映射被用来定义如何将DDS规范中的IDL映射到C++ API,达到方便OpenDDS使用者的目的。
与OMG IDL PSM的主要区别:本地接口被用于实体以及各种其他接口。在DDS规范中,这些被定义为不受限制的非本地接口。把它们定义为本地接口,可以提高性能、减少内存的使用,简化使用者与接口的交互,让使用者更加容易创建实现。

2.2.2 可扩展传输框架

OpenDDS使用由DDS规范定义的IDL接口,以便于初始化以及控制服务使用。通过一个OpenDDS特有的传输框架,可以实现数据传输,而此框架可以允许服务利用各种传输协议,因此可称为可插拔的传输层,使得OpenDDS的架构具有很大的灵活性。
目前,OpenDDS支持TCP/IPUDP/IPIP多点发送共享内存以及RTPS_UDP等多种传输协议,如图。传输协议可以通过配置文件指定,并在发布和订阅者进程中附于各种实体。

OpenDDS可扩展传输框架
可扩传输框架能够让应用程序开发人员自行定制传输协议,包括设定一些传输框架中的级别。当创建应用时,UDP传输协议为开发人员提供了良好的使用基础,可见目录$DDS_ROOT/dds/DCPS/transport/udp

2.2.3 DDS发现

DDS实现必须通过一些集中式代理或者分布式策略发现彼此,而OpenDDS的一个重要特征是:通过利用DCPS信息仓库(DCPSInfoRepo)或者RTPS发现(Discovery),但在DataWriter和DataReader之间采用不同的传输协议实现数据传输。
OMG DDS规范给出发现到实现的详细过程。在DDS实现之间的互操作性方面,OMG DDS-RTPS规范提供了关于发现对等类型的要求。OpenDDS提供两个关于发现的选项:

  • 信息仓库 (InfoRepo)集中式的储存库类型,其作为一个单独的进程运行,可以允许发布者和订阅者以集中式发现彼此。
  • RTPS发现:一种对等的发现类型,使用RTPS协议通知可用性和本地信息。
    其他DDS实现的互操作性必须使用对等方法,但只在OpenDDS部署中才有用。
2.2.3.1 利用DCPSInfoRepo的集中式发现

DCPSInfoRepo是OpenDDS执行的一种独立式服务,以便于实现集中式方法,他作为一个CORBA服务器进行实现。当用户请求一个关于主题的订阅时,DCPSInfoRepo就会定位主题,通知发布者目前有新的订阅者。当在非RTPS配置中使用OpenDDS时,就需要运行DCPSInfoRepo,而RTPS配置时则不需要使用DCPSInfoRepo。DCPSInfoRepo不包含在数据传播中,它的任务被限制在发现彼此的OpenDDS应用程序范围内。
应用程序使用者可利用DCPS域的非重叠性部分,灵活、自由地运行多个InfoRepo。
域操作可以在多个仓库上进行,从而形成一个分布式虚拟仓库,即仓库联盟(Repository Federation)。为了使每个仓库参与到联盟中,每个仓库都必须在启动时指定它自己的联盟标识符数值(一个32位的数字值)。

2.2.3.2 利用RTPS的对等发现

需要对等发现模式的DDS应用程序可由OpenDDS性能设定,通过使用RTPS协议可以完成这种类型的发现。这个简单的发现形式可通过DDS对DataReader和DataWriter简单配置发现,如图。

利用OpenDDS InfoRepo的集中式发现
当每个参与者的进程激活DataReader和写入程序的DDS-RTPS发现机制时,利用默认的或者配置的网络端口,网络端点才能被创建,以便于DDS参与者可以发布DataReader以及写入程序的可用性。一段时间后,基于标准的、彼此寻觅的那些就会基于所配置的、可插拔的传输协议,发现彼此并建立一个连接。
当开发并部署需要使用RTPS发现的应用程序时,开发人员需考虑以下限制因素:

  • 由于UDP端口的方式被分配给域ID,那么,域ID应当在0~231(包含231)之间。在每个OpenDDS进程、每个域中,支持多达120个域参与者。
  • 主题名称以及类型识别码被限制到256个字符。
  • 由于全局唯一标识符(GUID)的方式被指定,OpenDDS的本地多点发送传输不能与RTPS发现一并工作(如果试图这样,那么将发布一个警告信息)。

2.2.4 线程

OpenDDS创建ORB以及单独的线程。它也使用它自己的线程,以便于处理输入的和输出的非COBRA传输I/O。由于存在不能预料的连接关闭,创建一个单独的线程,以便于资源的清除。应用程序可通过DCPS的Listener机制,从这些线程中得到回调。
当通过DDS发布一个样本时,OpenDDS试图通过调用线程把样本发送给已连接的任何订阅者。如果发送线程被堵塞,那么样本可能在单独的服务线程上,排队等待着发送。此行为取决于QoS策略的设定值。
所有订阅者中的输入数据,由服务线程进行读取,并由应用程序进行排队,等待读取。从服务线程调用DataReaderListener。

2.2.5 配置

OpenDDS包括一个基于文件的配置框架,用于配置全局项。例如调试级别、内层分配以及发现,以及关于发布者和订阅者的传输实现详细信息。也可以直接以代码的方式实现配置,但建议使配置具体化,以便于是维护变得简单,并且减少运行时的错误。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Fan0628/article/details/89511118

智能推荐

Centos7常用命令及配置固定ip等配置_centos7用什么命令设置固定接口-程序员宅基地

文章浏览阅读811次。配置固定ip首先登陆centos是普通用户,我们需要切换到root用户才能操作文件进行保存,否则修改后是无法保存的,因为普通用户只有readonly权限首先打开Terminal普通用户切换到root输入:su root再输入普通用户的密码就可以了root切换到不同用户输入:su 普通用户名配置固定ip:配置固定IP采用哪种网络配置方式呢,NAT,桥接?仅主机反正是不行的,..._centos7用什么命令设置固定接口

像素位移_[GPU Gems2] 7. 带有位移映射的细分表面的自适应镶嵌-程序员宅基地

文章浏览阅读184次。Chapter 7. Adaptive Tessellation of Subdivision Surfaces with Displacement Mapping​developer.nvidia.com介绍本文的关键词有:自适应镶嵌(adaptive tessellation)Catmull-Clark 表面细分(subdivision surfaces)位移映射(displacement m..._subdivision limit point

CSS Vue 中使用标签 i 设置图标和hover样式(小技巧)_vue i标签-程序员宅基地

文章浏览阅读7.3k次,点赞4次,收藏6次。样式如下:方式一:使用图片<template> <div class="main"> <div class="win"> <div class="title"> <i class="icon close-icon"/> </div> </div> </div></t_vue i标签

JDK15新特性概述-程序员宅基地

文章浏览阅读3.3k次。Java的现状2020 年是 Java 诞生的第 25 个年头。Oracle表示,目前java仍然流行编程语言,广泛使用在企业中。目前全世界有超过69%的专职开发人员使用Java,全世界有510亿台活动Java虚拟机(JVM)在部署中,目前Java主要被用于分析,数据管理,大数据,DevOps,移动,持续开发工具和聊天机器人等服务。历史版本的主要新特性在过去的这些年中,Java ..._jdk15概述

网易云歌单添加到php,给自己的网站添加网易云音乐歌单吧^ ^-程序员宅基地

文章浏览阅读630次。这个是怎么实现的?一起来看看吧APlayer首先我们需要一个音频播放器,这里我用到了APlayer,这是由bilibili前端大神DIYgod开源的播放器,有兴趣的可以去TA的主页看看,非常惊艳,这里我就不多说了我们看一下APlayer的官方文档,方法很简单const ap = new APlayer({container: document.getElementById('aplayer'),a..._php嵌入网易云动态

ListView的用法_listview 享学-程序员宅基地

文章浏览阅读107次。package com.enjoy.leo_listview;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.AdapterView;import android.widget.ListView;import java.util.ArrayList;_listview 享学

随便推点

(一) mootools介绍-程序员宅基地

文章浏览阅读269次。目录:介绍mootools mootools v.s. jquery mootools的Hello World 核心部分的模块划分, Core 核心模块 Types 类型模块 Browser 浏览器模块 Class 类模块 Slick 选择器模块 Element 元素模块 Fx 动画模块 Request 请求模块 Utiliti..._mootools

基于jQuery 常用WEB控件收集-程序员宅基地

文章浏览阅读134次。原文地址: http://www.open-open.com/ajax/jQuery.htm Horizontal accordion: jQuery 基于jQuery开发,非常简单的水平方向折叠控件。Horizontal accordion: jQuery jQuery-Horizontal Accordion 具有XBOX360 blade界..._jquery web 控件

Upload-labs 18 条件竞争——通关_upload_labs第18关-程序员宅基地

文章浏览阅读3.8k次,点赞3次,收藏7次。访问目标站点,提示上传图片马查看源码思路:上传shell.php.7z图片木马配合解析漏洞实验步骤:图片中php一句话木马代码:<?php fputs(fopen('shell2.php','w'),'<?php @eval($_POST["x"])?>’);?>第一种:使用python脚本第一步:burpsuite抓包,上传文件名字shell.php.7z..._upload_labs第18关

【前端开发】Vue/uview/uni-app,实现登录注册页面_uview登录页面-程序员宅基地

文章浏览阅读7.7k次,点赞10次,收藏47次。注册的思路: 注册需求: 注册所需的 (1)使用uview的u-form表单组件 先将版式排出来(如果需要额外加样式,就加同样的类名即可) (2)再进行参数的设置 u-form:需要设置:model="form" ref="uForm" +参数列表 u-form-item:需要设置 label="昵称" prop="name" labelWidth="160" leftIcon="phone" +参数列表 u-input:需要设置v-m..._uview登录页面

高通AR93XX QCA95XX系列CPU上调试32MB SPI Nor Flash_ami 32m spi修改-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏13次。简单描述了在高通9XXX系列CPU,基于Openwrt bb1407调试32MB SPI Nor Flash时所遇到的问题,以及相应的原理和解决方案。_ami 32m spi修改

netns命名空间使用_net ns-程序员宅基地

文章浏览阅读607次。在linux系统中通过netns创建虚拟主机,作用同VM,相比于VM其优势是随时创建,随时删除,操作方便增加虚拟网络命名空间vm,vm是命名空间的名字,可以随意起,就创建了一台虚拟nsip netns add vm显示物理机里的命名空间,加不加list都行,显示刚创建的vmip netns (list)进入netns,也可以不进入但执行每一个ip link都需要在前面加上ip..._net ns

推荐文章

热门文章

相关标签