DDS QoS:是不是可以在不指定密钥的情况下发送数据?

Posted

技术标签:

【中文标题】DDS QoS:是不是可以在不指定密钥的情况下发送数据?【英文标题】:DDS QoS: Is it possible to send data without specifying a key?DDS QoS:是否可以在不指定密钥的情况下发送数据? 【发布时间】:2021-07-28 14:57:33 【问题描述】:

我目前正在使用 Eclipse Cyclone DDS C++,我想知道是否可以在 IDL 中不使用#pragma keylist 指定任何密钥的情况下发送数据。

是否可以通过 QoS 设置来实现?如果有,怎么做?

【问题讨论】:

【参考方案1】:

如果您在没有列出任何关键字段的情况下执行#pragma keylist TYPE,IDL 编译器将生成创建没有任何关键字段的主题所需的一切。所以

struct S 
  long something;
  string orother;
;
#pragma keylist S

完全有效,然后你可以为S创建一个主题。

我不完全确定你的意思

在这种情况下,读者无法区分同一主题的写入。

以上将导致该主题的单个实例。您仍然可以拥有历史记录,例如,读者仍然可以通过指定 KEEP_ALL 历史记录设置来确保它看到每个更新。因此,读者仍然可以通过查看内容和/或示例信息来区分写入,但对于 DDS,这些都是对这一实例的更新。

是否可以通过 QoS 设置来实现?

不,您(当前)不能使用 QoS 设置覆盖关键字段。

【讨论】:

我不想更改 IDL 文件,因此无法添加 `#pragma keylist S'。 在那种情况下,为什么不 ``` #include "S.idl" #pragma keylist S ``` 呢? 这几乎就是我所做的。我用一个键和原始文件制作了一个包装器 IDL 文件。但我想知道是否可以在不指定密钥的情况下传输数据。 我更新了问题以使其更加清晰。感谢您的 cmets,这有帮助。

以上是关于DDS QoS:是不是可以在不指定密钥的情况下发送数据?的主要内容,如果未能解决你的问题,请参考以下文章

ROS2/DDS/QoS/主题的记录

在不泄露密钥的情况下从 Flash 客户端验证文件的真实性

DDS/RTPS如何保证Qos?

如何在不发送任何内容的情况下检查频道是不是已满[重复]

哈希表调整大小:我们如何在不知道密钥的情况下做到这一点?

如何在不公开 API 密钥的情况下发出 POST 请求?