如何解决为什么 DataWriter 和 DataReader 的默认可靠性值不同?
DDS 规范说 DataWriter 的 Reliability 的默认值为 RELIABLE,DataReader 的默认值为 BEST_EFFORT。当DataWriter 和DataReader 使用默认QOS 值创建时,如何进行可靠的通信? 即使 DataReader 配置为 BEST_EFFORT,ack/nack 机制是否有效? 为什么 DataWriter 和 DataReader 的默认可靠性值不同?
解决方法
当 DataWriter 和 DataReader 使用默认 QOS 值创建时, 如何进行可靠的通信? ack/nack机制 工作,即使 DataReader 配置为 BEST_EFFORT?
不,如果您对 DataWriter 和 DataReader 应用默认 QoS 设置,则无需修复任何丢失的数据包,也不会启动 ack/nack 机制。即使 DataWriter 能够在默认情况下提供可靠的通信,如果 DataReader 不要求它就不会。
他们获得可靠通信的唯一方法是修改 DataReader QoS 以使用可靠的可靠性。
为什么 DataWriter 和 数据阅读器?
这是 DDS 规范的规定,但并未解释其背后的原理。
我怀疑这种想法可能是这种特定的可靠性策略选择倾向于以最少的配置更改覆盖最多的用例。尽力而为的数据流在使用 DDS 的系统类型中很常见。在所有策略都设置为默认值的情况下,DataWriters 和 DataReaders 之间不会有 QoS 不匹配,并且确实使用了尽力而为的方法。没有(明显的)与此相关的开销。如果 DataReader 确实需要保证交付,它只需要选择 RELIABLE 策略,DataWriter 将与该 DataReader 建立协议以参与可靠性协议。
也就是说,对于所有请求提供 (RxO) 的 QoS,就像可靠性一样,我认为明确设置它们并记录为什么为每个数据流选择特定策略组合是一种很好的做法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。