- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我参与了一个项目,该项目使用 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/
我有这个代码: System.err.print("number of terms = "); System.out.println(allTerms.size()); System.err
我有以下问题:在操作系统是 Linux 的情况下和在操作系统是 MacOs 的情况下,我必须执行不同的操作。 所以我创建了以下 Ant 脚本目标: /u
我正在调用 system("bash ../tools/bashScript\"This is an argument!\"&"),然后我正在调用 close(socketFD) 直接在 system
使用最初生成的随机元素来约束随机数组的连续元素是否有效。 例如:我想生成一组 10 个 addr、size 对来模拟典型的内存分配例程并具有如下类: class abc; rand bit[5:0
我正在创建一个必须使用system(const char*)函数来完成一些“繁重工作”的应用程序,并且我需要能够为用户提供粗略的进度百分比。例如,如果操作系统正在为您移动文件,它会为您提供一个进度条,
我即将编写一些项目经理、开发人员和业务分析师会使用的标准/指南和模板。目标是更好地理解正在开发或已经开发的解决方案。 其中一部分是提供有关记录解决方案的标准/指南。例如。记录解决/满足业务案例/用户需
在开发使用压缩磁盘索引或磁盘文件的应用程序时,其中部分索引或文件被重复访问(为了论证,让我们说一些类似于 Zipfian 分布的东西),我想知道什么时候足够/更好地依赖操作系统级缓存(例如,Debia
我们编写了一个 powershell 脚本,用于处理来自内部系统的图像并将其发送到另一个系统。现在,业务的另一部分希望加入其中,对数据进行自己的处理,并将其推送到另一个系统。打听了一下,公司周围有几个
我正在尝试朗姆酒我的应用程序,但我收到以下错误:System.Web.HttpUnhandledException:引发了“System.Web.HttpUnhandledException”类型的异
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
所以我在其他程序中没有收到此错误,但我在这个程序中收到了它。 这个程序是一个我没有收到错误的示例。 #include int main() { system("pause"); } // en
我在 c# System.URI.FormatExption 中遇到问题 为了清楚起见,我使用的是 Segseuil 的 Matlab 方法,并且它返回一个图片路径 result。我想为其他用户保存此
我正在尝试像这样设置文本框的背景色: txtCompanyName.BackColor = Drawing.Color.WhiteSmoke; 它不喜欢它,因为它要我在前面添加系统,例如: txtCo
请帮助我解决 System.StackOverflowException我想用 .aspx 将记录写入数据库我使用 4 层架构来实现这一切都正常但是当我编译页面然后它显示要插入数据的字段时,当我将数据
我使用了一些通常由系统调用的API。 因此,我将 android:sharedUserId="android.uid.system" 添加到 manifest.xml, 并使用来自 GIT 的 And
我正在尝试创建一个小型应用程序,它需要对/system 文件夹进行读/写访问(它正在尝试删除一个文件,并创建一个新文件来代替它)。我可以使用 adb 毫无问题地重新挂载该文件夹,如果我这样做,我的应用
我想从没有 su 的系统 priv-app 将/system 重新挂载为 RW。如何以编程方式执行此操作?只会用 Runtime.getruntime().exec() 执行一个 shell 命令吗
我正在尝试制作一个带有登录系统的程序我对此很陌生,但我已经连续工作 8 个小时试图解决这个问题。这是我得到的错误代码 + ServerVersion 'con.ServerVersion' threw
当我“构建并运行”Code::Blocks 中的程序时,它运行得非常好!但是当我从“/bin”文件夹手动运行它时,当它试图用 system() 调用“temp.bat”时,它会重置。这是为什么?它没有
我想使用 system/pipe 命令来执行具有特殊字符的命令。下面是示例代码。通过系统/管道执行命令后,它通过改变特殊字符来改变命令。我很惊讶地看到系统命令正在更改作为命令传递的文本。 run(ch
我是一名优秀的程序员,十分优秀!