opendds qos策略之HISTORY

HISTORY策略的含义

顾名思义,该策略会影响历史样本数据的保存策略,即历史样本数据保存策略。这个策略是针对instance的,一个datawriter或者datareader可以根据key成员为设置多个instance,每个instance也可以独立的保存多个历史样本数据,每个instance下的一个消息称为一个样本。

HISTORY策略应用对象

该策略可以应用的对象为topic对象、datawriter对象和datareader对象。

HISTORY策略之depth

该值的含义是在kind值设置为KEEP_LAST_HISTORY_QOS时有效,指定最多保存多少个样本数据。

HISTORY策略之kind

该成员为枚举类型,包含两个枚举值,如下所示:

KEEP_LAST_HISTORY_QOS = 0:该策略的含义是仅保存最近的样本数据。从datawriter来说,每个instance没发送一个样本数据,则会从内存中删除该该样本数据,如果该instance下有个等多个未发送的数据,此时又有新的样本数据添加进来,则会将最老的未发送的数据从内存中删除,进而达到内存中最多保持depth个样本实例的目的。datareader类似,最多保持depth个未读实例,如果此时收到的新的样本数据,则从内存中删除最老的样本数据。需要注意的是这里的讨论是针对单个instance的。讲到这里朋友们可能就明白采取这种策略有可能会丢失数据。

KEEP_ALL_HISTORY_QOS = 1:该策略很明显是要保存所有的历史数据,无论读取与否,除非显式的删除内存中的数据或者定时进行内存管理。否则采取这种模式会对内存的压力较大。尤其是对于发送频率比较大的情况下。最初看到这个策略的时候我有些疑惑,认为设置这种策略会与读取样本数据冲突,但是后来想通了,这里仅仅是要保存样本数据,如果调用take方法读取样本数据的话相当于显式的从内存缓冲区中显式的删除的该样本数据,并无冲突的含义。

HISTORY策略默认值

KEEP_LAST_HISTORY_QOS

HISTORY策略在建立连接过程中的匹配原则

不涉及

你可能感兴趣的:(opendds,opendds)