1

我有一个既是 DataDriver 又是 DataReader 的 OpenDDS 节点。结果是,如果节点发送一个主题,则从同一个节点接收到相同的主题。

是否有避免这种行为的 QoS 策略?我希望一个节点可以从除自身之外的所有节点接收主题。

4

1 回答 1

1

我希望一个节点可以从除自身之外的所有节点接收主题。

如果您的相关主题的数据类型包含一个包含有关数据源的信息的属性,那么您可以使用该属性通过 ContentFilteredTopic 进行过滤。假设您的数据类型有一个nodeId标识您的节点的字段,那么您可以使用 ContentFilter 表达式nodeId <> %0,并将参数设置为您自己的nodeId。中间件将向您的 DataReader 提供所有更新,除了那些拥有您自己的nodeId. 查看DDS 规范以获取更多详细信息。

鉴于您的应用程序想要忽略来自您自己节点的数据,我认为您的数据类型实际上需要它nodeId作为属性,因为显然这是与您的应用程序相关的信息。因此,如果您目前没有它,您可能需要添加它。

如果您不允许或不想在您的数据类型中添加这样的字段,您还可以通过利用ignore_publication()orignore_participant()方法使用另一种更复杂的机制。这些也在规范中进行了解释。如果你想走那条路,如果你有任何问题,请告诉我。

最后,API 可能有特定于供应商的扩展,为您提供更简单的方法来实现您正在寻找的东西。例如,请参阅如何让 DataReader 忽略属于同一 DomainParticipant 的 DataWriter?使用 RTI 产品的解决方案。

于 2016-01-06T03:26:14.627 回答