最近几年,一直在了解、研究、使用和定制化DDS技术,包括商用的如RTI Connext、CoreDX、OpenSplice,开源的如OpenDDS、Cyclone DDS、FastDDS等;
各DDS实现厂家遵循的DDS规范大体是DDSv1.4或更老的规范版本,使用到的开发语言有C、C++、Java等。
跟随OpenDDS,从3.8到3.13、3.19、3.21等,这几年走过使用OpenDDS道路,对趟过的坑(bug)、待优化点、重大的功能定制等,做一个大概的记录。
趟过的坑(典型和非典型bug)
1)RTPS发现机制,双方DomainParticipant超时后,存在不能重新主题匹配和建立连接的问题,
即RTPS发现层的持久durable信息不能继续发送,导致超时后主题匹配处理机制产生问题。
这个问题的解决,是DDS技术提供扛毁重组特性的一个重要表现;
2)在sub方快速停止和快速重启时,部分主题资源的延迟清理而造成的主题匹配的问题
=》一种现象是,主题先能够匹配(match_num=1)后不能匹配(match_num=0),间歇性表现;
=》重新匹配永远不成功(match_num=0)的的情况。
3)内存泄露的问题,是DDS程序运行的一大顽疾
=》使用get_topic_name()导致的内存泄漏;需要采用CORBA::String_var log_topic_name = this->get_topic()->get_name();