文章目录

  • 一、DCPS概述
    • 1.1 基本组成
    • 1.2 内置主题
    • 1.3 QoS策略
    • 1.4 Listener
    • 1.5 条件
  • 二、OpenDDS实现
    • 2.1 兼容性
      • 2.1.1 DDS兼容性
      • 2.1.2 DDS-RTPS兼容性
    • 2.2 OpenDDS架构
      • 2.2.1 设计原理
      • 2.2.2 可扩展传输框架
      • 2.2.3 DDS发现
        • 2.2.3.1 利用DCPSInfoRepo的集中式发现
        • 2.2.3.2 利用RTPS的对等发现
      • 2.2.4 线程
      • 2.2.5 配置

一、DCPS概述

1.1 基本组成

  • 域(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等多种传输协议,如图。传输协议可以通过配置文件指定,并在发布和订阅者进程中附于各种实体。


可扩传输框架能够让应用程序开发人员自行定制传输协议,包括设定一些传输框架中的级别。当创建应用时,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简单配置发现,如图。


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


OpenDDS学习笔记(3):OpenDDS概述相关推荐

  1. RN学习笔记01:概述、特点与环境搭建

    RN学习笔记01:概述.特点与环境搭建 一.RN概述 React Native(简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的JS框架 Reac ...

  2. IOS学习笔记03---C语言概述

    IOS学习笔记03---C语言概述 0 3.C语言1-C语言概述         qq交流群:创梦技术交流群:251572072                        创梦网络赚钱群:2483 ...

  3. 知识图谱·概念与技术--第1章学习笔记--知识图谱概述--知识图谱的概念,与传统语义网络的区别

    知识图谱·概念与技术--第1章学习笔记--知识图谱概述--知识图谱的概念,与传统语义网络的区别 知识图谱的概念,与传统语义网络的区别 狭义概念 作为语义网络的内涵 与传统语义网络的区别 优点 缺点 与 ...

  4. oracle学习笔记 Oracle体系结构概述

    oracle学习笔记 Oracle体系结构概述 从这节开始,开始讲oracle数据库体系结构. 首先从总体上,从概述上把oracle整体的体系结构讲一下, 然后接下来的时间我们会一块一块的将oracl ...

  5. Java学习笔记-Day42 HTML概述

    Java学习笔记-Day42 HTML概述 一.前端简介 二.HTML 语言 1.简介 2.HTML的编写规范 3.HTML标签的声明 4.HTML的调试 5.标记语言的特点 6.头标签head 7. ...

  6. 华为HCIA-datacom 学习笔记14——WLAN概述

    华为HCIA-datacom 学习笔记14--WLAN概述 1.WLAN(无线局域网) 通过无线技术构造的无线局域网络.WLAN广义上是指以无线电波.激光.红外线等无线信号代替有线局域网中的部分或全部 ...

  7. c语言float二进制输出代码_C语言学习笔记——学前知识概述

    将我大一学习C语言时做的笔记拿来与大家分享,内容比较浅显,比较适合初学者,如有错误还请见谅,提出改正,谢谢! 前言:此C语言笔记是本人在自学时记录的一些重点或初学者常犯的错误,希望我的这本笔记能够对大 ...

  8. SSH学习笔记(9)__Spring5_概述/简单程序/整合日志

    Spring5学习笔记 本文章基于B站UP主 孙帅suns 的视频教程<孙哥说Spring5>进行整理记录,本文章仅用于个人学习/交流使用. 参考博客:https://blog.csdn. ...

  9. 蜂鸟E203学习笔记-取指模块概述(2)

    蜂鸟E203学习笔记 前言 1 部分译码 2 分支预测与PC生成 3 请求与响应 4 流水线冲刷 5 阻塞请求 前言 本文取指模块概述后半部分,前半部分跳转至:取指模块概述(1) 1 部分译码 Min ...

  10. shell中文件路径用变量定义_shell学习笔记01(概述amp;变量)

    Shell概述 为什么要学习Shell呢? 因为有用. Shell脚本入门 1.脚本格式 脚本以#!/bin/bash开头(指定解析器) 2.第一个Shell脚本:helloworld (1)需求:创 ...

最新文章

  1. 软件设计之UML—UML中的六大关系
  2. tkinter窗口居中方法
  3. Windows10+PicGo+七牛云+Typora搭建写作环境与图床
  4. Android windowSoftInputMode属性解析
  5. 地图漫游功能的具体体现_一卡通考勤门禁管线系统主要模块功能说明
  6. 跨域资源共享CORS详解
  7. oracle sql-1,Oracle – Oracle SQL(1)
  8. 解决matlab2018a安装后遇到matlab license manager error -8
  9. JDK11+Tomcat10 下载安装+环境配置
  10. 笑傲江湖手3D游服务器端文件,新笑傲江湖手游7月2日部分服务器数据互通预告...
  11. 必备的中国风PNG免扣元素点缀,尽显国潮韵味
  12. 六年不惑:开发人员的“僵难Style”
  13. js的函数抖动和函数节流原理
  14. 用NSSM把influxDB安装成windows后台服务
  15. vue PC项目实现 支付宝支付(跳转至支付界面)
  16. 探究网络信息安全问题及防范措施
  17. 实时互联网的隐形风口
  18. mysql 给库赋权,Mysql数据库安装、赋权
  19. 【再学Tensorflow2】TensorFlow2的建模流程:Titanic生存预测
  20. Windows10优化系统,优化达到30多项,速度大幅提升,

热门文章

  1. excel教程自学网_Excel自学教程:办公室必备技能——Excel表格的打印技巧
  2. 思迈特软件Smartbi:掌控生产状况,报表开发效率提升30倍的秘密
  3. 手机数控模拟器安卓版_数控机床模拟器手机版下载-数控机床模拟器最新版v1.1.4 安卓版 - 极光下载站...
  4. html 组织结构 图表,OrgChart-简单实用的组织结构图表jQuery插件
  5. 三种方式快速将pdf转换成ppt
  6. idea调试需要的快捷键_IDEA调试常用快捷键
  7. 使用USBasp给arduino烧写bootloader
  8. tar -zxvf .tar.gz和tar -xvf .tar
  9. 基于TCP/UDP的socket服务器搭建流程
  10. impalasql根据特殊符号劈开截取字符串