# LatencyBudgetQoS
# 功能介绍
用于声明数据从发送到进入订阅者的接收缓存并通知订阅者,所能接收的最大延时。比如写者发送了一条延时是 4 秒的数据,若有其他优先度高或延时较少的其他数据也一同发送,那么读者就会优先读到有优先度高或者延时较少的数据,到了 4 秒如果还没有被订阅端接受,那么就会强制订阅端接受。
# 兼容性
当且仅当不等式“写者的 duration <= 读者的 duration”为“真”时,DDS 才会认为写者与读者兼容。
# 使用方法
LatencyBudgetQoS 成员列表如下表。
类型 | 字段名 | 描述 |
---|---|---|
Duration_t | duration | 表示数据从写入到被订阅应用程序接受的最大延迟。 |
# DataWrietr 端
1) QoS 赋值
对 DDS_DataWriterQoS 数据类型的变量 wQoS 下的 latency_budget 的 duration 属性进行赋值。设定数据的最大延时。并在创建写者的时候作为参数传给 create_datawriter。
1) QoS 赋值
对 DDS_DataReadrQoS 数据类型的变量 rQoS 下的 latency_budget 的 duration 属性进行赋值。设定数据的最大延时。并在创建读者的时候作为参数传给 create_datareader。
1) 适用场景
用于使订阅端不会接收到过时的数据。控制数据的时延,让发送者的数据在时延之内能被订阅端接受。或者当有其他更重要的数据需要优先获取的时候,可以为这些数据让路,让它们首先被获取,然后自己在时延之内再被获取。
2) 使用例子
现有两个写者和两个读者,一对写者和读者没设置 QoS 进行正常收发。另一对写者和读者在启动后会设置 LatencyBudgetQoS 的延迟时间。被设置 QoS 的写者发送的数据比没设置的写者发送的数据大 10000,且发布者每发送一次数据沉睡 4 秒,
下图为设置延时为 1 秒的结果。可以看出,被设置 LatencyBudgetQoS 的读者接收到的数据始终慢于未设置 QoS 的读者,因为被设置 LatencyBudgetQoS 的读者可以在到达延迟时间内再接受,不用直接获取数据并提交。