什么是OpenDDS???What is OpenDDS???开源项目???

2024-04-15 14:38
文章标签 项目 开源 opendds

本文主要是介绍什么是OpenDDS???What is OpenDDS???开源项目???,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • OpenDDS
    • ACE
    • TAO
    • ACE+TAO
    • OpenDDS类型定义
    • OpenDDS Demo Code
    • OpenDDS 可扩展的传输框架
    • OpenDDS 发现
      • 利用DCPSInfoRepo的集中式发现(动态发现)
      • 利用RTPS的对等发现(静态发现)

OpenDDS

  • OpenDDS是用C++语言针对"对象管理组织“(OMG)关于数据分发服务(Data Distribution Service,DDS)规范的开源实现。
  • OpenDDS采用C++语言实现,但也提供JAVA和JMS的开发接口,这意味着JAVA程序开发也可以使用OpenDDS。
  • OpenDDS是构建在ACE(Adaptive Communication Environment,自适应通信环境,一套基于C++语言的开源网络可开发库)上,通过ACE保证跨平台和可移植性。
  • OpenDDS同时利用了TAO(The ACE ORB,基于ACE基础上的CORBA实现框架),提供IDL编译器等功能作为OpenDDS的DCPS信息仓库。
  • OpenDDS遵循OMG的DDSV1.2规范,同时采用和ACE/TAO相同的license,允许开发者在保留版权申明的前提下在各种场合(包括商用)使用和修改源代码。
  • 当前最新发行版本为OpenDDS3.15。

ACE

What is ACE?

TAO

What is TAO?

ACE+TAO

What is ACE+TAO?

More about ACE & TAO


读OpenDDS-latest.pdf

OpenDDS类型定义

OpenDDS定义IDL文件

@topic
struct Message
{string from;string subject;@key long subject_id;string text;long count;
}

@topic 注释说明:该类型可以与某一个Topic进行绑定,用作OpenDDS的传输类型。

@key 注释说明:subject_id字段被定义为键值。键值的作用是用来区分同一个topic下的不同的instance。

简单理解DDS中关于topic,instance和sample之间的关系,如图

在这里插入图片描述

同一个topic可以创建多个instance,不同的instance是按照key来进行区分的。而每一个instance可以理解为sample的模子,sample是实际的在节点间进行收发的数据。

OpenDDS Demo Code

简单如下:

在这里插入图片描述

OpenDDS 可扩展的传输框架

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

在这里插入图片描述

OpenDDS 发现

OpenDDS发现服务,一种是peer-peer的发现(RTPS的对等发现),该发现的特点是节点在启动前需要配置好我所关心节点的信息(IP)。另一种是与第一种相反的方式(DCPSInfoRepo的集中式发现),在整个OpenDDS的系统中,所有节点之间并不知道彼此的存在,在程序启动后,由程序去检索DCPSInfoRepo服务实现动态发现。

我理解为动态发现静态发现

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

利用DCPSInfoRepo的集中式发现(动态发现)

在这里插入图片描述

DCPSInfoRepo是OpenDDS执行的一种独立式服务,以便于实现集中式方法,他作为一个CORBA服务器进行实现。当用户请求关于一个主题的订阅时,DCPSInfoRepo就会定位主题,通知发布者目前有新的订阅者。当在非RTPS配置中使用OpenDDS时,就需要运行DCPSInfoRepo,而RTPS配置时则不需要使用DCPSInfoRepo。DCPSInfoRepo不包含在数据传播中,它的任务被限制在发现彼此的OpenDDS应用程序范围内。

应用程序使用者可利用DCPS域的非重叠性部分,灵活、自由地运行多个InfoRepo。

域操作可以在多个仓库上进行,从而形成一个分布式虚拟仓库,即仓库联盟(Repository Federation)。为了使每个仓库参与到联盟中,每个仓库都必须在启动时指定它自己的联盟标识符数值(一个32位的数字值)。

利用RTPS的对等发现(静态发现)

在这里插入图片描述

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

当每个参与者的进程激活DDS-RTPS发现机制时,需要利用默认(或者配置)的网络端口,网络端点才能被创建,这样才能方便后续DDS参与者发布DataReader以及DataWriter的详细配置信息。一段时间后,各个节点就会基于所配置的、可插拔的传输协议,发现彼此并创建一个连接。
当开发并部署需要使用RTPS发现的应用程序时,开发人员需考虑以下限制因素:

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

这篇关于什么是OpenDDS???What is OpenDDS???开源项目???的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/906096

相关文章

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

springboot项目中使用JOSN解析库的方法

《springboot项目中使用JOSN解析库的方法》JSON,全程是JavaScriptObjectNotation,是一种轻量级的数据交换格式,本文给大家介绍springboot项目中使用JOSN... 目录一、jsON解析简介二、Spring Boot项目中使用JSON解析1、pom.XML文件引入依

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv