- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
问题:如何获取展位发布者连接和断开的活跃度通知?
背景:我正在使用 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/
我正在使用 openDDS 来实现以数据为中心的发布订阅模型。发布者不断发送数据,订阅者将收到它。但是对于订阅者来说,它必须根据我给出的条件接收过滤后的数据。 假设发布者和订阅者使用的主题结构是: m
问题:如何获取展位发布者连接和断开的活跃度通知? 背景:我正在使用 OpenDDS 实现,其中我有一个数据类型 (dt) 的发布者和订阅者,使用相同的主题,位于不同的计算机上。 订阅者端的读者已经覆盖
寻找标准 CMakelist 来构建 OpenDDS 应用程序(简单发布者/订阅者)。我熟悉教程,并且使用 MPC 构建示例的一切都运行良好。我需要使用 cmake 构建我的项目。我正在使用 Open
我在尝试编译一个简单的 IDL 文件时有点卡住了。 root@ricardo:/home/ricardo/Desktop/librerias/dds/DDS/bin# ldd opendds_idl
我正在从源代码构建 OpenDDS 3.8。运行 configure 命令时,我收到一些跳过消息。其中大多数是java(我不使用它,所以我可以跳过它们),但其他一些消息引起了我的注意: Skippin
是否可以在带有 raspbian 的树莓派上构建 openDDS 和所需的 ACE+TAO? 我想为 java 构建它,所以我尝试了 $DDS_ROOT/java/INSTALL 中描述的方式,包括来
在我使用 OpenDDS 的练习中,我想从一个 IDL 结构创建多个主题,这可能吗?否则请告诉我该怎么做。 我是这样操作的,如有不妥请指正。我使用的示例位于 OpenDDS-3.12/examples
最近我尝试使用 OpenDDS 3.13 Security。我还遵循了 OpenDDS 安全手册并制作和构建项目。像这样配置命令: $./configure --security --xerces -
我已经按照提供的配置和安装文档安装了最新版本的 OpenDDS。 我可以用终端完美运行 opendds 示例。我需要将 OpenDDS 与 QT 集成,因为 OpenDDS 支持 CMake 我尝试在
经过漫长的过程,我们选择了 CentOS 7.3 + Qt5.8 + OpenDDS 3.10 来满足我们的需求。 现在我正在研究如何使 OpenDDS 在 Qt5 中可用? 搜索“opendds q
我是一名优秀的程序员,十分优秀!