gpt4 book ai didi

c++ - 不要破坏 DDS 系统中的向后兼容性消息

转载 作者:太空狗 更新时间:2023-10-29 23:00:26 24 4
gpt4 key购买 nike

我参与了一个项目,该项目使用 DDS 作为通信协议(protocol)并使用 C++ 作为语言。如您所知,交换的消息称为主题。好吧,有时一个团队必须更改主题定义,因此,依赖于该主题的其他软件停止工作,有必要到处更新主题并重新编译。所以,我的问题是,你知道如何不破坏向后兼容性吗?我一直在搜索,我找到了谷歌 Protocol Buffer ,他们是这样说的:

"You can add new fields to your message formats without breaking backwards-compatibility; old binaries simply ignore the new field when parsing. So if you have a communications protocol that uses protocol buffers as its data format, you can extend your protocol without having to worry about breaking existing code."

还有其他想法吗?

提前致谢。

最佳答案

OMG 规范 Extensible and Dynamic Topic Types for DDS (或简称为 DDS-XTypes)解决了您的问题。引用自该规范:

The Type System supports type evolution so that it is possible to “evolve the type” as described above and retain interoperability between components that use different versions of the type

目前并非所有 DDS 实现都支持 XType,因此您可能不得不求助于其他解决方案。例如,您可以在主题名称中包含版本编号方案,以避免不同组件之间的键入冲突。为了确保每个组件都收到它需要的正确数据,您可以创建一个服务,负责根据需要在不同版本的主题之间转发。此服务必须了解主题的不同版本,并应注意填充默认值和/或在不同类型之间进行转换。这是否是一个可行的解决方案取决于您的系统要求等因素。

如果只是为了解决类型演化问题,不建议在 DDS 中使用 Protocol Buffers 等不同类型的系统。实际上,您会将 PB 消息作为对 DDS 中间件不透明的数据进行传输。这意味着您还会失去一些不错的工具功能,例如动态发现和类型显示,因为 DDS 中间件无法理解 PB 消息。此外,您的应用程序将变得更加复杂,因为它们将负责调用正确的 PB 反/序列化方法。让 DDS 处理所有这些会更容易。

无论您采用哪种方法,都建议您严格管理数据模型的演变。如果让任何人根据自己的喜好添加或删除某些属性,情况将变得难以快速维护。

关于c++ - 不要破坏 DDS 系统中的向后兼容性消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33719014/

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