OpenDDS和出版商存在的通知
-
18-09-2019 - |
题
问题:我怎样才能得到展台出版商的活力通知连接和断开
背景: 我正在与一个OpenDDS实现方式,其中我有一个出版商和一个数据类型(DT)的订户工作,使用相同的主题,位于单独的计算机上。
在用户侧的读取器已重写on_data_available(...)
and on_liveliness_changed(...)
的实现。我的用户第一次启动时,导致回调on_liveliness_changed(...)
它说,没有可用的作家。当出版商开始我得到一个新的回调来告诉我有可用的作家,当发布者发布,on_data_available(...)
被调用。到目前为止,一切都按预期工作。
在发布服务器上的写入器具有重写的实施on_publication_matched(...)
的。当开始发行,on_publication_matched(...)
得到,因为我们已经有了一个用户名为开始
问题是,当发布断开,我没有得到任何回调on_liveliness_changed(...)
对读者的一面,我也不让当出版商再次开始了新的回调。
我曾尝试通过设置readerQos.liveliness.lease_duration
改变readerQos。
但结果是,on_data_available(...)
不会被调用,而唯一的回调on_liveliness_changed(...)
是在启动时,告诉我,有没有出版商。
DDS::DataReaderQos readerQos;
DDS::StatusKind mask = DDS::DATA_AVAILABLE_STATUS | DDS::LIVELINESS_CHANGED_STATUS | DDS::LIVELINESS_LOST_STATUS ;
m_subscriber->get_default_datareader_qos( readerQos );
DDS::Duration_t t = { 3, 0 };
readerQos.liveliness.lease_duration = t;
m_binary_Reader = static_cast<binary::binary_tdatareader( m_subscriber->create_datareader(m_Sender_Topic,readerQos,this, mask, 0, false) );
/的Kristofer
解决方案
确定,猜不会有太多的用户DDS这里
一些研究,我发现,仅当此兼容性标准被满足产生一个读/写器的匹配:提供lease_duration <=请求lease_duration
的解决方案是设置作家的QoS提供同样的活力。有可能是检查是否被请求的QoS读者可以通过相应的作家提供的一种方式,如果没有,则使用“低”的QoS,所有的你我还没有尝试过呢。
在on_liveliness_changed回调方法我简单地评价alive_count在从LivelinessChangedStatus。
/的Kristofer