如何在 DDS idl 文件中定义类和方法?

问题描述

我是 DDS 的新手......到目前为止我对 OpenDDS 和 CycloneDDS 的经验很少

是否可以在空闲文件中定义一个类并具有成员变量和成员方法?还是 DDS 标准只支持结构和原始数据类型?

解决方法

IDL 语言在 OMG IDL specification 中定义。它由许多构建块组成,其中包括核心数据类型,如您提到的结构和原始数据类型,以及接口,其中包括您询问的方法。

但是,DDS 仅使用这些构建块的一个子集。对于 the current version 4.29.3 DDS Profiles 部分定义了哪些与 DDS 的三个不同级别的支持相关:Plain DDS可扩展 DDS em> 和 DDS over RPC

您会看到后者确实包括Building Block Interfaces - Basic,正如您可能对 RPC 所期望的那样。但是,并非所有 DDS 实现都支持 RPC。 Plain DDSExtensible DDS 得到更普遍的支持,并且接口不是该功能的一部分。

因为您在另一个问题中询问了这一点:请注意,DDS over RPC 中捕获的接口功能不是为了分发对象及其方法,而是为了远程调用对象上的方法 - - 正如名称远程过程调用所暗示的那样。

,

您的问题的另一个答案是,您可能在问后续问题,就好像它是最初的问题一样。构建分布式系统的方法有很多种,鉴于您的问题,以下三个示例似乎很合适:

  • 那些围绕远程过程调用/远程方法调用而设计的:在这种情况下,CORBA 是完美的参考,但有很多(RPC、gRPC、DCOM,你能想到的);
  • 那些围绕运送对象及其实现而设计的:一个例子是 Java/JINI,但还有许多其他例子(浏览器中的 JavaScript 可以被视为一个例子);
  • 那些围绕运输状态(即普通旧数据)并添加/转换该状态而设计的:古代历史上的 SPLICE,今天的 DDS。

您的问题表明您正在寻找用于进行分布式对象计算的中间件。如果这确实是您正在寻找的,那么 DDS 是一个非常次优的选择。是的,RPC 可以建立在它之上(RPC-over-DDS 只是让它更容易一点),在一个主要围绕分布式状态构建的系统中,这样做是有意义的。

如果您可以使用对象的方法序列化对象,那么您当然可以使用 DDS 在网络中分发它们(您可以通过这种方式做一些有趣的事情)。但是,这更多是您使用的编程语言的功能,而不是中间件的功能,IDL 不会帮助您解决这个问题。