data-distribution-service - OpenSplice DDS 订阅者始终不接收数据
问题描述
使用 OpenSplice DDS 时,我有以下情况:
发布者持续发布 DDS 主题实例。订阅者使用 NoOpDataReaderListener 订阅数据,我的测试同时运行发布者和订阅者,订阅者中on_data_available
的 NoOpDataReaderListener 方法使用std::cout
. on_subscription_matched
我的问题是,即使在每次运行期间都调用了 NoOpDataReaderListener 方法,表明发布者和订阅者匹配成功,但在多次运行测试时,数据并没有一直打印出来。但on_data_available
并不总是打印出数据内容。
std::cout
即使我用<<替换 on_data_available 中打印的数据内容data do come in
,该消息也不会一直出现,可能只有 10 次运行中的 7 次(7 次运行所有 DDS 样本可以从订阅者看到,另外 3 次运行没有 DDS 样本出现完全从订阅者中退出)。所以我认为这更多地与 DDS 问题有关,而不是 std out 没有被清除。有谁知道或如何诊断 DDS 通信通道问题?
使用wireshark的更多信息,我观察到以下内容:
看起来运行是否成功(订阅者成功从发布者获取数据)取决于发布者进程中的用户单播端口是否可以将数据(RTPS DATA 而不仅仅是 RTPS 心跳)发送到用户多播定位器(239.255.0.1::multicast_port)在订阅者进程中。
解决方案
推荐阅读
- java - 如何使用 Spring 安全性从 Spring Data JPA 加载经过身份验证的用户的实体模型以在其他 JPA 存储库中使用?
- rxjs - RxJS:只要所有主题都发出真值,就发出新值
- python - “HttpRequest”对象不可下标
- apache-kafka - 卡夫卡经纪人在停机一天后重新启动 - 易碎的 ISR 集
- node.js - 无法从查询 xpath 的开头获取兄弟姐妹
- javascript - 反应 setTimeout 和 clearTimeout
- python - 如何在 Python 中检测黑屏中的坏点?
- php - 按键组合两个数组
- apache-spark - sparkML 和 systemML 有什么区别?
- java - Spring Working sessionRegistry 不使用 CAS auth