【问题标题】:Why default Reliability values are different for DataWriter and DataReader?为什么 DataWriter 和 DataReader 的默认可靠性值不同?
【发布时间】:2021-03-17 08:46:01
【问题描述】:

DDS 规范说 DataWriter 的 Reliability 默认值为 RELIABLE,而 DataReader 的默认值为 BEST_EFFORT。当 DataWriter 和 DataReader 使用默认 QOS 值创建时,如何进行可靠的通信? 即使 DataReader 配置为 BEST_EFFORT,ack/nack 机制是否有效? 为什么 DataWriter 和 DataReader 的默认可靠性值不同?

【问题讨论】:

    标签: publish-subscribe data-distribution-service


    【解决方案1】:

    当使用默认 QOS 值创建 DataWriter 和 DataReader 时, 如何进行可靠的通信? ack/nack 机制 工作,即使 DataReader 配置为 BEST_EFFORT?

    不,如果您对 DataWriter 和 DataReader 应用默认的 QoS 设置,则不会努力修复任何丢失的数据包,也不会启动 ack/nack 机制。即使默认情况下 DataWriter 能够提供可靠的通信,如果 DataReader 不要求它,它就不会。

    他们获得可靠通信的唯一方法是修改 DataReader QoS 以使用 RELIABLE 可靠性。

    为什么 DataWriter 和 DataWriter 的默认可靠性值不同 数据读取器?

    这是 DDS 规范所规定的,但并未解释其背后的基本原理。

    我怀疑这种想法可能是这种特定的可靠性策略选择倾向于以最少的配置更改覆盖最多的用例。尽力而为数据流在使用 DDS 的系统类型中很常见。将所有策略设置为默认值,DataWriters 和 DataReaders 之间不会出现 QoS 不匹配,并且确实使用了尽力而为的方式。没有与此相关的(明显的)开销。如果 DataReader 确实需要保证交付,它只需选择 RELIABLE 策略,DataWriter 将使用该 DataReader 升级其协议以参与可靠性协议。

    也就是说,对于所有请求提供 (RxO) 的 QoS,就像可靠性一样,我认为明确设置它们并记录为每个数据流选择特定策略组合的原因是一种很好的做法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-14
      • 2017-01-07
      • 2014-12-25
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 2010-12-13
      • 2010-09-10
      相关资源
      最近更新 更多