使用 RTI Connext DDS 进行数据通信

Data communication using RTI Connext DDS

有一个已经编译好的桌面应用程序,我无法访问源代码。此应用程序生成真实的飞行数据,并提供通过网络将此数据发送到所需套接字的机会。

我可以使用我使用经典客户端-服务器方法(在 C# 中)编写的程序接收此数据。 但我想将 DDS 集成到我的项目中,并使用 RTİ Connext DDS 来实现。

我知道要使用 DDS,"QoS" 和 "Topic" 等设置在发布者和订阅者端必须相同。在我创建并将订阅的应用程序中进行这些设置似乎很容易。但是我无法访问发布者应用程序的源代码,所以我无法设置"QoS"和"Topic"等参数用于发布者端的数据通信。

作为我研究的结果,我了解到我应该使用路由服务来做到这一点。 Routing Service 是否可以在没有 QoS 和 Topic 定义的情况下提供应用程序之间的数据传输?还是自动进行数据传输的必要设置?

我是新手,正在努力学习。如果有人帮助我理解我会很高兴

将现有应用程序与基于 DDS 的系统集成的一种方法是引入一个应用程序,该应用程序接收来自现有应用程序的数据,然后在将其转换为预期格式后将其转发到 DDS 域。 RTI 的路由服务旨在以通用方式执行此操作,但您也可以使用自己的 C# 程序来执行相同的操作。

使用路由服务 (RS) 时,可以使用配置文件选择所有必要的设置,例如主题和类型名称以及 QoS 设置。困难的部分是从您的原始应用程序接收数据,因为这是特定于您的情况,而 RS 是一个通用组件。路由服务允许插入您自己的所谓适配器,它基本上是一个可加载插件,负责从现有应用程序读取数据——您必须自己编写代码。此外,可以使用所谓的处理器自定义该数据的转换,这也是您必须自己编写的软件。

对于您的情况,在这个阶段,扩展使用经典客户端-服务器方法读取数据的 C# 应用程序并将数据转发到 DDS 域似乎更合适。为此,您必须在 IDL 中定义 DDS 数据类型(如果您尚未这样做)并让 RTI 代码生成器生成关联的 C# 数据类型和强类型 C# DataWriter 类 以发布数据。您的应用程序必须侦听来自现有(服务器)应用程序的数据,在数据到达时读取它,根据 DDS 代码生成器生成的 C# 数据类型对其进行格式化,然后将其转发到您的 DDS DataWriter。后者您可以使用正常的 DDS 机制根据您的需要配置主题和类型名称以及 QoS 设置。

一旦您的扩展 C# 应用程序将数据转发到 DDS 域,其他应用程序就可以直接订阅该数据。实际上,这是选择正确的主题并设置正确的 QoS 策略的问题。到目前为止,从您的问题描述来看,您似乎不需要路由服务。

应用路由服务的常见示例是:

  • 当您构建系统的系统时,路由服务可以在它们之间透明地转发 DDS 数据——有点像 IP 路由器对 IP 流量所做的那样。示例是分层数据总线体系结构和系统,其中包括需要互连的不同子网或地理上分散的 DDS 域。
  • 如果您想要从其他类型的 "data domains" 向 DDS 域导入或导出信息,路由服务为此提供了一个通用框架。这通常需要定制插件来执行所需的数据转换,就像您的情况一样。开箱即用的其他示例包括与关系数据库的集成,用于记录时间序列或用于捕获 DDS 域的当前状态。