当前位置: 首页 > news >正文

OpenDDS-3.27构建与用法

一、OpenDDS-3.27构建

./configure
To enable Java bindings, use ./configure --java
make

二、运行Messenger Example:

source setenv.sh
For the C++ example:cd DevGuideExamples/DCPS/Messenger
For the Java example:cd java/tests/messenger
./run_test.pl

三、用法

Getting Started - OpenDDS 3.27.0

入门
使用DCPS
本节将重点关注一个使用DCPS的示例应用程序,该程序将数据从一个发布者进程分发到单个订阅者进程。它基于一个简单的消息传递应用程序,其中单个发布者发布消息,单个订阅者订阅这些消息。我们将使用默认的QoS属性和默认的TCP/IP传输。这个示例的完整源代码可以在DevGuideExamples/DCPS/Messenger/目录下找到。DDS和DCPS的其他特性将在后面的部分进行讨论。

使用IDL定义数据类型
在本示例中,主题的数据类型将使用OMG接口定义语言(IDL)进行定义。有关如何构建不使用IDL定义主题数据类型的OpenDDS应用程序的详细信息,请参阅DynamicDataWriters和DynamicDataReaders。

标识主题类型
DDS使用的每种数据类型都是使用OMG接口定义语言(IDL)定义的。OpenDDS使用IDL注解[1]来标识其传输和处理的数据类型。这些数据类型将由TAO IDL编译器和OpenDDS IDL编译器处理,以生成必要的代码,以便使用OpenDDS传输这些类型的数据。以下是定义我们的Message数据类型的IDL文件:

module Messenger {@topicstruct Message {string from;string subject;@key long subject_id;string text;long count;};
};

@topic注解用于标记可以作为主题类型的数据类型。这必须是一个结构体或联合体。结构体或联合体可以包含基本类型(如short、long、float等)、枚举、字符串、序列、数组、结构体和联合体。有关使用IDL定义OpenDDS主题类型的更多详细信息,请参阅IDL兼容性。上面的IDL在Messenger模块中定义了Message结构体,以供本示例使用。


@key注解用于标识用作此主题类型键的字段。主题类型可以有零个或多个键字段。这些键用于标识主题中的不同DDS实例。键可以是标量类型、包含键字段的结构体或联合体,或者是这些构造的数组。

多个键使用单独的@key注解进行指定。在上面的示例中,我们将Messenger::Message的subject_id成员标识为键。使用唯一的subject_id值发布的每个样本将被定义为属于同一主题内的不同DDS实例。由于我们使用的是默认的QoS策略,因此具有相同subject_id值的后续样本将被视为该DDS实例的替换值。

@key可以应用于以下类型的结构体字段:

任何基本类型,如布尔值、整数、字符和字符串。

具有定义好的键或键集的其他结构体。例如:

struct StructA {@key long key;
};struct StructB {@key StructA main_info;long other_info;
};@topic
struct StructC {@key StructA keya; // keya.key is one key@key StructB keyb; // keyb.main_info.key is anotherDDS::OctetSeq data;
};

在这个例子中,从主题类型上标记的键开始,一直到用作键的基本数据类型,每个类型都被标记为@key。然而,这并不是严格必要的,正如下一节所示。

其他没有定义任何键的结构体。在以下示例中,隐式地表示InnerStruct中的所有字段都是键。

struct InnerStruct {long a;short b;char c;
};@topic
struct OuterStruct {@key InnerStruct value;// value.a, value.b, and value.c are all keys
};

如果在结构体的任何字段中都没有标记@key或@key(TRUE),那么当这个结构体在另一个结构体中被用作键并标记为键时,该结构体中的所有字段都被视为键。使用@key(FALSE)标记的字段永远不会作为键,如下例所示:

struct InnerStruct {long a;short b;@key(FALSE) char c;
};@topic
struct OuterStruct {@key InnerStruct value;// Now just value.a and value.b are the keys
};

如果联合体的判别符被标记为键,则联合体也可以用作键。在下一节中有一个带键的联合体主题类型的示例,但请注意,用作键的联合体不必是主题类型。

任何前面提到的数据类型的数组都可以使用。@key不能应用于序列,即使基本类型在数组中有效也不行。此外,当@key应用于数组时,它会使数组中的每个元素都成为键的一部分。它不能应用于单个数组元素。

在使用DDS时,理解键的概念和如何正确应用它们是非常重要的。键用于唯一标识DDS实例,因此它们的定义和使用需要谨慎处理。正确地标记和使用键可以确保数据的准确性和一致性,避免潜在的数据混淆或重复问题。在编写IDL文件时,开发者应该根据应用程序的需求和数据模型来仔细选择键字段。

......

http://www.lryc.cn/news/336695.html

相关文章:

  • 计算机网络——MAC地址和IP地址
  • Unity构建详解(7)——AssetBundle格式解析
  • 前端对接fastGPT流式数据+打字机效果
  • 避免使用第三方工具完成电脑环境检测
  • vue 中 mixin 的应用场景,原理和合并规则
  • 点击按钮(文字)调起elementUI大图预览
  • 全面学习SpringCloud框架指南
  • 5G智慧水利数字孪生可视化平台,推进水利行业数字化转型
  • 新手入门:大语言模型训练指南
  • Win11 WSL2 install Ubuntu20.04 and Seismic Unix
  • rust使用print控制台打印输出五颜六色的彩色红色字体
  • 贪心算法|435.无重叠区间
  • C++的并发世界(七)——互斥锁
  • NI-LabView的DAQ缺少或丢失的解决办法(亲测有效)
  • cesium 调整3dtiles的位置 世界坐标下 相对坐标下 平移矩阵
  • flutter跑通腾讯云直播Demo
  • 飞机降落蓝桥杯[2023蓝桥省赛B组]
  • 如何动态渲染HTML内容?用v-html!
  • EFcore 6 连接oracle19 WinForm vs2022
  • (delphi11最新学习资料) Object Pascal 学习笔记---第9章第2节(finally代码块)
  • 220 基于matlab的考虑直齿轮热弹耦合的动力学分析
  • Intrigue Core:一款功能强大的攻击面枚举引擎
  • 【精品PPT】智慧路灯大数据平台整体建设实施方案(免费下载)
  • idea 中运行spring boot 项目报 Command line is too long的解决办法。
  • Windows终端添加git bash
  • 【方法】PDF密码如何取消?
  • 怎么开发一个预约小程序_一键预约新体验
  • JavaScript_注释数据类型
  • 蓝桥杯2020年第十一届省赛 CC++ 研究生组2.0
  • SOCKS5代理、代理IP、跨界电商、游戏技术与网络安全的综合探讨