提问人:sbi 提问时间:7/21/2015 更新时间:8/26/2015 访问量:132
跨平台发送大量数据的好方法是什么?
What's a good means to send lots of data across platforms?
问:
我们需要在非常不同的软件组件(从嵌入式设备到 Web 服务)之间发送数据。出于各种原因(事实上,我们让 Mosquitto 在最有问题的平台上进行编译,而不是其中最不重要的),我们决定使用 MQTT 消息代理协议。这是一个相当轻量级的协议,它为要发布的消息提供应用程序定义的有效负载。我们现在需要找到一种方法来指定该有效负载中的数据。
目前的想法是使用一些现有的IDL,使其能够至少从C++和Java访问数据,理想情况下还有Python和其他语言。如果这些平台的编码/解码 API 可用于将数据序列化到 MQTT 协议的有效负载中,并将其反序列化出来,这将是理想的选择。
有这样的东西吗?
注意:
- 要有很多数据。事实上,我们可能需要将其从当前规范中削减,以避免网络拥塞。XML 格式可能太健谈了。
- 该格式应该易于编码和解码,因为在嵌入式平台上,CPU 份额很有价值。(这可能是不通过网络发送 XML 的另一个原因。
- 如果所需的任何组件(IDL 编译器等)不是跨平台的,则它应该在 Windows 上运行。
- 我不是网络专家。如果 IDL 是过去十年的事情,那么该技术已经向前发展,并且有更好的方法可以通过网络在平台之间移动数据,请继续提出建议。
答:
您可以使用谷歌协议缓冲区(本质上这是一种“二进制”XML,开销要小得多)。
AFAIK 存在 c++、java 和 python 库。
对于嵌入式 c++ 系统,您可以使用 NanoPb 实现,它是纯 C 代码中的轻量级 google 协议缓冲区实现(我们目前在嵌入式系统中使用该库)
查看 https://developers.google.com/protocol-buffers/
评论
您还可以查看 Apache Thrift、Cap'n'proto、Msgpack
评论
我有搜索 Web 服务理念和首选代码生成(之前测试过来自 WSDL 的 SOAP 客户端生成)。通过这种方式,我找到了 Apache Thrift(顺便说一句,Thrift IDL 编译器是 Win 应用程序)。我从未与 IDL 的 CORBA 进行过实际接触,只阅读了很少的材料。(definition)->server service code
(definition)->client of service
我的解决方案非常小,二进制协议的高速不是太重要,但 IDL 和许多生成的语言(包括古老的 Delphi)非常非常好。最初的主要语言是Java和C# - C++,Deplhi和动态语言是未来的选择。
上一个:如何遍历 TR1 元组
评论