如何在 DDS idl 文件中定义 class 和方法?
How to define a class and method in DDS idl file?
我是 DDS 的新手....到目前为止我对 OpenDDS 和 CycloneDDS 的经验很少
可不可以在idle文件里面定义一个class,并且有成员变量和成员方法?还是 DDS 标准仅支持结构和原始数据类型?
IDL 语言在OMG IDL specification 中定义。它由许多构建块组成,其中包括核心数据类型,如您提到的结构和原始数据类型,以及接口,其中包括你问的方法。
但是,DDS 使用的只是这些构建块的一个子集。对于 the current version 4.2,9.3 DDS 配置文件 部分定义了其中哪些与 DDS 的三个不同级别的支持相关:Plain DDS、可扩展 DDS 和 基于 RPC 的 DDS。
您会看到后者确实包括 Building Block Interfaces - Basic,正如您对 RPC 的期望。然而,并不是所有的 DDS 实现都支持 RPC。 普通 DDS 和 可扩展 DDS 得到更普遍的支持,接口不是该功能的一部分。
因为你在另一个问题中问过这个问题:请注意,在 DDS over RPC 中捕获的接口功能不是为了分发对象及其方法,而是为了调用远程对象上的方法——顾名思义,远程过程调用。
您问题的另一个答案是,您可能会把后续问题当作第一个问题来问。构建分布式系统有许多不同的方法,鉴于您的问题,三个示例似乎是合适的:
- 那些围绕远程过程 calls/remote 方法调用设计的:在这种情况下,CORBA 是完美的参考,但还有很多(RPC、gRPC、DCOM,随便你说);
- 那些围绕传送对象而设计的以及它们的实现:一个例子是 Java/JINI,但还有许多其他例子(JavaScript 在浏览器中可以被认为是一个);
- 那些围绕运输状态(a.k.a。普通旧数据)和adding/transforming那个状态设计的那些:古代历史上的 SPLICE,今天的 DDS。
您的问题表明您正在寻找用于进行分布式对象计算的中间件。如果那确实是您要找的东西,那么 DDS 是一个非常次优的选择。是的,RPC 可以建立在它之上(RPC-over-DDS 只是让它更容易做到)并且在一个主要围绕分布式状态构建的系统中这样做是有意义的。
如果您可以使用它们的方法序列化对象,那么您当然可以使用 DDS 在网络中分发它们(您可以通过这种方式做一些有趣的事情)。但是,这更多是您使用的编程语言的功能,而不是中间件的功能,IDL 不会帮助您。
我是 DDS 的新手....到目前为止我对 OpenDDS 和 CycloneDDS 的经验很少
可不可以在idle文件里面定义一个class,并且有成员变量和成员方法?还是 DDS 标准仅支持结构和原始数据类型?
IDL 语言在OMG IDL specification 中定义。它由许多构建块组成,其中包括核心数据类型,如您提到的结构和原始数据类型,以及接口,其中包括你问的方法。
但是,DDS 使用的只是这些构建块的一个子集。对于 the current version 4.2,9.3 DDS 配置文件 部分定义了其中哪些与 DDS 的三个不同级别的支持相关:Plain DDS、可扩展 DDS 和 基于 RPC 的 DDS。
您会看到后者确实包括 Building Block Interfaces - Basic,正如您对 RPC 的期望。然而,并不是所有的 DDS 实现都支持 RPC。 普通 DDS 和 可扩展 DDS 得到更普遍的支持,接口不是该功能的一部分。
因为你在另一个问题中问过这个问题:请注意,在 DDS over RPC 中捕获的接口功能不是为了分发对象及其方法,而是为了调用远程对象上的方法——顾名思义,远程过程调用。
您问题的另一个答案是,您可能会把后续问题当作第一个问题来问。构建分布式系统有许多不同的方法,鉴于您的问题,三个示例似乎是合适的:
- 那些围绕远程过程 calls/remote 方法调用设计的:在这种情况下,CORBA 是完美的参考,但还有很多(RPC、gRPC、DCOM,随便你说);
- 那些围绕传送对象而设计的以及它们的实现:一个例子是 Java/JINI,但还有许多其他例子(JavaScript 在浏览器中可以被认为是一个);
- 那些围绕运输状态(a.k.a。普通旧数据)和adding/transforming那个状态设计的那些:古代历史上的 SPLICE,今天的 DDS。
您的问题表明您正在寻找用于进行分布式对象计算的中间件。如果那确实是您要找的东西,那么 DDS 是一个非常次优的选择。是的,RPC 可以建立在它之上(RPC-over-DDS 只是让它更容易做到)并且在一个主要围绕分布式状态构建的系统中这样做是有意义的。
如果您可以使用它们的方法序列化对象,那么您当然可以使用 DDS 在网络中分发它们(您可以通过这种方式做一些有趣的事情)。但是,这更多是您使用的编程语言的功能,而不是中间件的功能,IDL 不会帮助您。