在 DDS 中可以读取写入/发布者缓存吗

Posted

技术标签:

【中文标题】在 DDS 中可以读取写入/发布者缓存吗【英文标题】:In DDS can the write/publisher cache be read 【发布时间】:2013-11-22 06:23:48 【问题描述】:

这个问题是关于我目前在 DDS 中面临的一个障碍。我可以使用各自实现提供的 QueryFilter 来读取订阅者/读取器缓存。但我现在想读取 Publisher/Writer 缓存,但我无法做到。

用例是我正在发布一个对象列表并且不想自己在本地维护一个列表,因为 DDS 已经在这样做了。在订阅服务器上,我可以使用 QueryFilter 获取对象实例,就像我之前所说的那样。但是发布者有什么办法吗?我想避免在发布者端创建订阅者,或者在本地和 GDS 中维护列表。

我正在使用 C++ 编程并使用 OpenSplice,但即使是针对其他一些实现,也请务必回答。

【问题讨论】:

【参考方案1】:

没有可用于读取 DataWriter 端缓存的 DDS 标准 API。据我所知,没有任何 DDS 实现提供类似的功能。

用例是我正在发布对象列表并且不想发布 我自己在本地维护一个列表,因为 DDS 已经在 [在 Publisher/Writer 缓存中] 这样做了。

好吧,作为用户,您无法确定 DataWriter 端的缓存中有什么。 DDS 规范并未准确指定该缓存中的内容,并且它在 API 中也不存在。

DataWriter 端缓存的目的是存储数据,以支持所请求的服务质量。对于尽力而为的 DataWriter,缓存可能甚至不存在,或者包含有关已发布键值的最少信息。对于可靠的 DataWriter,缓存中可能包含正在可靠交付过程中的样本,但在交付后它们可能会被删除。对于可靠、非易失性的 DataWriter,缓存可能包含所有需要供 lat-joining 读取器使用的样本。

我说可能,因为这完全取决于产品的实施方式。

DataWriter端唯一与缓存相关的方法是lookup_instance()

我想避免在发布者端创建订阅者,或者 在本地和 GDS 中维护列表。

在发布者端创建一个 DataReader 似乎完全符合您的需要。为什么要避免这种情况?

【讨论】:

我正在研究您所说的后一种情况,即“对于可靠的、非易失性的 DataWriter,缓存可能包含所有需要供 lat-joining 阅读器使用的样本”。我现在明白,即使以这种方式完成,它也将特定于一种实现,并且对于其他实现可能不一样,在这种情况下,我会坚持使用早期的实现。我想避免在发布者端创建一个 DataReader,认为如果数据已经在 DataWriter 缓存中维护,为什么在 DataReader 有相同的缓存而不是使用 DataWriter 的缓存 另外,如果您不介意我问,您是否与任何 DDS 实现相关联:)?我只是问,因为我问了另一个与 DDS 相关的问题,你也回答了,你的回答深入而清晰。 糟糕。请忽略我的题外话问题。阅读您的个人资料 :) 特别是,由于您提到了 OpenSplice,该实现使用单独的组件来维护非易失性数据;它没有存储在你所谓的 writer-cache 中。 是的,我多年来一直是 DDS 爱好者,并且拥有多种实现经验......

以上是关于在 DDS 中可以读取写入/发布者缓存吗的主要内容,如果未能解决你的问题,请参考以下文章

OpenSplice DDS:发布,直到超时

ASP.net中使用静态变量缓存信息可以吗?

对特定键的请求可以转到分布式缓存中的不同缓存吗?

我们可以在堆内存上使用非临时 mov 指令吗?

在 x64 上再次读取之前在未缓存的地址写入完整的缓存行

如何在不接触缓存的情况下写入或读取内存