是否所有内置主题的数据字段都是按照DDSRTPS规范发送的?

问题描述 投票:1回答:2

我想了解的是 RTPSDDS 规范更好一点。

RTPS规范谈到了 "数据变化 "以及如何传播它们,但并没有确切地规定 "传播什么"(比如它是否知道传输了什么,只发送变化,还是它把数据看作是黑盒子,总是发送整个数据)。现在我假设这是特定的实现。

但我想知道,对于内置的Topic来说,具体规定了什么行为.DDS规范定义了几个内置Topic的数据类型(即数据字段名称、类型和意义)。我们是否可以假设,如果一个Data字段被改变,其他未改变的Data字段也都会被发送?

publish-subscribe data-distribution-service
2个回答
0
投票

RTPS规范中谈到了 "数据变化 "和它们如何被传播,但并没有确切地指定 "传播什么"。

虽然可能不是一目了然,但RTPS规范在 "第10章序列化有效载荷表示法 "中确切规定了传播的内容。它提到了不同的标准化类型的表示,如CDR和CDR2,它们有几种变化,包括大恩迪安和小恩迪安版本。这些格式都不是特定的实现,因为那会妨碍不同DDS实现之间的预期互操作性。

这些格式的细节将在《DDS》中进一步解释。DDS-XTYPES 规范,特别是第7.4节,在我提到的第10章中,有好几处都提到了它。XTypes规范则引用了一些定义CDR的旧规范。

话说回来,要读完所有这些规范是很复杂的,所以让我来回答你的另一个问题吧。

我们是否可以假设,如果一个Data字段发生了变化,其他所有没有变化的Data字段也会被发送?

这基本上是正确的。对DDS数据的更新,无论是内置类型还是用户定义类型,都是以 "原子式 "的方式与所有字段进行通信的。这意味着更新的接收者将不必担心维持某种状态,在这种状态下,必须应用一些部分更新来确定 实际 当前状态。

但是,被定义为 "可选 "的值是一个例外。这样做的原因并不是因为这些值在上次更新后没有改变,而是因为这些字段被认为是非强制性的。据我所知,内置类型没有定义这样的可选字段。 事实上XTypes附件D: DDS内置主题数据类型已经更新了内置主题的定义,并包含了一些可选的字段。

此外,一些编码允许省略值,如果它们等于指定的默认值。在这种情况下,也不是 "不变 "的方面导致了省略,而是它们等于默认值的事实。

有时,原子更新的方法会引起关注,通常是当一个类型中的某些字段比其他字段更新得更频繁时。这通常是数据模型设计方式不正确的标志。

不过,你提到的内置Topic并没有这个问题。如果有的话,也不希望它们频繁更新。


0
投票

规范[s]为内置Topic类型的一些字段定义了默认值。 发送者可以省略字段,而接收者应采用这些省略字段的默认值。 有些字段是正确处理所必需的,即使可能有一个隐含的默认值。

例如,一个关于订阅内置主题的样本可能会省略'deadline'字段,而接收方将使用默认的deadline.period值'infinite'。

所以,回答你的问题。

"我们是否可以假设,如果一个数据字段发生了变化, 其他所有没有变化的数据字段也会被发送?"

不一定:如果其他(未改变的)字段处于其默认值(并且不是必需的),它们 "可能 "不会被发送。 发送它们是完全合法的,但一个实现可以为了优化目的选择不发送它们。

© www.soinside.com 2019 - 2024. All rights reserved.