gpt4 book ai didi

c++ - OpenDDS 和发布者存在的通知

转载 作者:搜寻专家 更新时间:2023-10-31 01:23:11 33 4
gpt4 key购买 nike

问题:如何获取展位发布者连接和断开的活跃度通知?

背景:我正在使用 OpenDDS 实现,其中我有一个数据类型 (dt) 的发布者和订阅者,使用相同的主题,位于不同的计算机上。

订阅者端的读者已经覆盖了 on_data_available(...)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) );

/克里斯托弗

最佳答案

好吧,我猜这里的 DDS 用户不多。

经过一些研究,我发现只有满足以下兼容性标准时才会发生读写器匹配:offered lease_duration <= requested lease_duration

解决方案是设置 writer QoS 以提供相同的活跃度。可能有一种方法可以检查相应的编写器是否可以提供所请求的读取器 QoS,如果不能,则使用“较低”的 QoS,尽管我还没有尝试过。

在 on_liveliness_changed 回调方法中,我简单地评估了 LivelinessChangedStatus 中的 alive_count。

/克里斯托弗

关于c++ - OpenDDS 和发布者存在的通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1879287/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com