什么是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

相关文章

Spring 缓存在项目中的使用详解

《Spring缓存在项目中的使用详解》Spring缓存机制,Cache接口为缓存的组件规范定义,包扩缓存的各种操作(添加缓存、删除缓存、修改缓存等),本文给大家介绍Spring缓存在项目中的使用... 目录1.Spring 缓存机制介绍2.Spring 缓存用到的概念Ⅰ.两个接口Ⅱ.三个注解(方法层次)Ⅲ.

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

SpringBoot项目中Redis存储Session对象序列化处理

《SpringBoot项目中Redis存储Session对象序列化处理》在SpringBoot项目中使用Redis存储Session时,对象的序列化和反序列化是关键步骤,下面我们就来讲讲如何在Spri... 目录一、为什么需要序列化处理二、Spring Boot 集成 Redis 存储 Session2.1

springboot+vue项目怎么解决跨域问题详解

《springboot+vue项目怎么解决跨域问题详解》:本文主要介绍springboot+vue项目怎么解决跨域问题的相关资料,包括前端代理、后端全局配置CORS、注解配置和Nginx反向代理,... 目录1. 前端代理(开发环境推荐)2. 后端全局配置 CORS(生产环境推荐)3. 后端注解配置(按接口

Vue 2 项目中配置 Tailwind CSS 和 Font Awesome 的最佳实践举例

《Vue2项目中配置TailwindCSS和FontAwesome的最佳实践举例》:本文主要介绍Vue2项目中配置TailwindCSS和FontAwesome的最... 目录vue 2 项目中配置 Tailwind css 和 Font Awesome 的最佳实践一、Tailwind CSS 配置1. 安

Spring Boot项目打包和运行的操作方法

《SpringBoot项目打包和运行的操作方法》SpringBoot应用内嵌了Web服务器,所以基于SpringBoot开发的web应用也可以独立运行,无须部署到其他Web服务器中,下面以打包dem... 目录一、打包为JAR包并运行1.打包为可执行的 JAR 包2.运行 JAR 包二、打包为WAR包并运行

Nginx部署React项目时重定向循环问题的解决方案

《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f

解决Maven项目报错:failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0的问题

《解决Maven项目报错:failedtoexecutegoalorg.apache.maven.plugins:maven-compiler-plugin:3.13.0的问题》这篇文章主要介... 目录Maven项目报错:failed to execute goal org.apache.maven.pl

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3