我是DDS领域的新手,需要具备以下理解。
如何在两个供应商之间发布共同主题以实现DDS中的互操作性?
情景是: 假设有两个供应商产品V1和V2。 V1有一个发布主题T1的发布者。 V2想要订阅这个主题。订阅者(V2)如何知道存在主题T1?
我对域级有类似疑问。订阅者是否知道它必须参与哪个域?
我正在使用OpenDDS。
由于
答案 0 :(得分:1)
供应商之间的互操作性是可能的,并且由主要供应商定期测试/演示。
您需要将DDS实施配置为使用RTPS(我认为目前是RTPS2),而不是供应商可能使用的任何专有传输。默认情况下可能会启用此功能。
就要参与的域而言,您可以通过编程方式在特定域中创建域参与者(它连接到的域可能由配置文件控制)以及您创建的所有其他实体(发布者,订阅者等)然后属于该域名参与者,因此在该域中运作
答案 1 :(得分:1)
建立@ rcs的答案......你需要做的实际工作量取决于DDS实施(OpenDDS,RTI,Prismtech ......),因为它们会有所不同默认值。如果你在两端都使用相同的,那么你的配置会变得简单得多,因为默认值应该排列在域和RTPS之类的东西上。
您需要确保以下匹配:
我现在所能想到的一切,希望有所帮助。我发现DDS文档非常好,特别是如果你知道什么时候可以(并且什么时候你不能)使用任何供应商的文档答案来实现(例如:在RTI&上找到答案) #39; s doc或forum以及它是否适用于您的OpenDDS应用程序)。通常解决方案类似,但您会发现RTI支持最多,而RTI + Prismtech拥有一些最好的文档。
答案 2 :(得分:0)
DDS RTPS协议交换发现信息,以便参与同一域(!)的不同应用程序知道谁在那里,以及他们提供/请求的内容。您需要确保两个应用程序使用相同的域ID(在域参与者上指定)。此外,由于某些实现允许不同的传输选项,请确保使用RTPS(有时称为DDSI)网络。
RTPS规范包含从域ID到端口号的映射,因此如果来自不同供应商的应用程序使用相同的ID,它应该可以正常工作。但是,实现可能会使用配置覆盖端口号。
为了最大限度地提高应用程序正确通信的可能性,请确保它们使用相同的IDL数据模型。供应商有不同的方法来键入不完全匹配的进化/映射类型,并且并非所有这些都实现了XTypes规范(尚未)。
此外,由于某些实现比其他实现更严格,请确保您保持在规范的范围内。这意味着主题名称应该只包含字母数字字符(我有时会看到':'表示作用域,这是不允许的。)
供应商之间肯定不会起作用的事情是TRANSIENT / PERSISTENT持久性或通过TCP进行通信,因为两者尚未标准化。 TRANSIENT_LOCAL应该有效。 TRANSIENT_LOCAL和TRANSIENT之间的区别在于使用TRANSIENT_LOCAL,数据在发布者(编写者)离开系统后不再对齐,而使用TRANSIENT时数据仍然可用。
另请注意,对于供应商之间的API级互操作性,您最好的机会是使用新的isocpp API,因为在我看到的供应商实现中,这个API已经非常一致地实现了。
希望有所帮助!