3.1.2.2.2. DisablePositiveACKsQosPolicy
此额外的QoS(服务质量)策略允许在严格可靠通信不是必需且带宽有限的情况下减少网络流量。它通过改变默认行为来实现,默认行为是从读者发送正向确认(positive acks)到写者。而在启用此QoS时,当读者缺失某个样本时,只会发送负向确认(negative acks),但写者会在认为数据已被确认之前,保留数据一段可调时间。
QoS政策数据成员列表:
数据成员名称 | 类型 | 默认值 |
---|---|---|
enabled | bool | false |
duration | Duration_t | c_TimeInfinite |
enabled: 指定QoS是否启用。如果为true,则表示禁用了正向确认,DataReader仅发送负向确认;否则,既发送正向也发送负向确认。
duration: 表示DataWriters在将数据视为已被确认之前保留该数据的时间。这一数值不适用于DataReaders。
注意:此QoS政策适用于DataWriter和DataReader实体。
启用的enabled
数据成员不能在已启用的实体上进行修改。因此,该特性必须在初始化期间设置。只有duration
数据成员可以在运行时修改。
警告:
为了保持DataWriters和DataReaders之间的兼容性,它们必须遵循兼容性规则。如果DataWriter未启用该QoS,则相应的DataReader不能启用该QoS。
兼容性规则:
为了维护DisablePositiveACKsQosPolicy在DataReaders和DataWriters之间的兼容性,如果DataWriter禁用了此QoS,则DataReader不能启用它。
DataWriter enabled 值 | DataReader enabled 值 | 兼容性 |
---|---|---|
true | true | 是 |
true | false | 是 |
false | true | 否 |
false | false | 是 |
示例
// 此Qos对于DataWriter和DataReader实体有不同的API,因为它是通过ReliableWriterQos和ReliableReaderQos访问的。
// 有关更多详细信息,请参见RTPSReliableWriterQos & RTPSReliableReaderQos部分。
DataWriterQos writer_qos;
DataReaderQos reader_qos;
// DisablePositiveACKsQosPolicy默认为enabled = false
// 将enabled更改为true
writer_qos.reliable_writer_qos().disable_positive_acks.enabled = true;
reader_qos.reliable_reader_qos().disable_positive_acks.enabled = true;
// DisablePositiveACKsQosPolicy默认为无限持续时间
// 将持续时间更改为1秒
writer_qos.reliable_writer_qos().disable_positive_acks.duration = {1, 0};
reader_qos.reliable_reader_qos().disable_positive_acks.duration = {1, 0};
// 专门地,DataWriters还可以禁用心跳搭载
writer_qos.reliable_writer_qos().disable_heartbeat_piggyback = true;
// 在创建相应实体时使用修改后的QoS
writer_ = publisher_->create_datawriter(topic_, writer_qos);
reader_ = subscriber_->create_datareader(topic_, reader_qos);
以上内容概述了DisablePositiveACKsQoSPolicy,包括其作用、属性、兼容性要求以及如何在C++中实施该政策。
内容由零声教学AI助手提供,问题来源于学员提问