RTI DDS 两个应用程序在同一域上发布数据。当一个应用程序关闭并重新打开时,它会丢失数据。怎么解决?
Posted
技术标签:
【中文标题】RTI DDS 两个应用程序在同一域上发布数据。当一个应用程序关闭并重新打开时,它会丢失数据。怎么解决?【英文标题】:RTI DDS two applications publishing data on same domain. When one application closes and reopens it looses the data. How to solve? 【发布时间】:2019-02-15 10:08:31 【问题描述】:我有两个发布者和订阅者应用程序。
App1 -> 发布 -> 学生(1,ABC),学生(2,EFG)。 之后我运行第二个应用程序。应用程序都在同一个域上订阅和发布 App2 能够订阅由 App1 发布的 Student (1,ABC), Student(2,EFG) 然后我发布了数据。 App2->发布->教师(1,AAA),教师(2,BBB) 现在我得到了学生(1,ABC),学生(2,EFG),老师(1,AAA),老师(2,BBB) 来自 App2 当我关闭 app2 并再次重新打开时,我无法订阅此数据 如何订阅我在关闭申请前发布的数据? DDS Spy 显示同一域上仍有可用数据。有人可以帮忙理解吗?
【问题讨论】:
【参考方案1】:如何订阅我在关闭应用程序之前发布的数据 ?
您正在寻找的行为受持续服务质量 (QoS) 设置的支持。它指定发布的数据是否需要保持可用,以便在数据发布后仍可交付给迟到的加入域的订阅者,以及持续多长时间。
您可以为 Durability QoS 选择四种不同的策略。为了增加数据的生命周期,它们是:
VOLATILE
(默认):更新仅传递给发布时存在的 DataReader
TRANSIENT_LOCAL
:只要 DataWriter 存在,更新就可以传递给 DataReaders
TRANSIENT
:只要域存在,更新就可以传递给 DataReaders
PERSISTENT
:更新始终可以传送给 DataReaders,即使在域重新启动后也是如此。
对于这些策略中的任何一个,如果使用了 dispose()
调用,或者如果其生命周期到期,数据也会被删除。
从您的简短描述来看,您似乎需要为您的 Durability QoS 选择 TRANSIENT_LOCAL
策略。
有关详细信息,请参阅 DDS 规范中的第 2.2.3.4 节 DURABILITY,可从 OMG DDS webpage 免费下载。
【讨论】:
以上是关于RTI DDS 两个应用程序在同一域上发布数据。当一个应用程序关闭并重新打开时,它会丢失数据。怎么解决?的主要内容,如果未能解决你的问题,请参考以下文章
使用开源库opendds实现数据分发服务dds 这个是啥意思? 谢谢各位大大~
当 Rails 中的同一域上存在会话时,如何在 PHP 中创建会话?