什么是跨平台发送大量数据的好方法?

时间:2015-07-21 13:40:31

标签: java c++ cross-platform idl

我们需要在非常不同的软件组件之间(从嵌入式设备到Web服务)发送数据。由于各种原因(事实上我们在最有问题的平台上编译Mosquitto并不是最不重要的),我们决定使用 MQTT < / strong>消息代理协议。它是一个相当轻量级的协议,为要发布的消息提供应用程序定义的 有效负载 。我们现在需要找到一种在该有效负载中 指定数据 的方法。

目前的想法是使用一些 现有IDL ,它能够至少从 C ++访问数据 Java ,理想情况下也是Python和其他语言。如果这些平台的 编码/解码 API可用于将数据序列化为MQTT协议的有效负载并将其反序列化,这将是理想的。

有这样的东西吗?

注意:

  • 很多数据。实际上,我们可能需要将其从当前规范中删除,以避免网络拥塞。 XML格式对此可能过于健谈。
  • 格式应易于编码和解码,因为在嵌入式平台上,CPU份额很有价值。 (这可能是不通过网络发送XML的另一个原因。)
  • 如果此需要的任何组件(IDL编译器等)不是跨平台的,它应该在Windows上运行。
  • 我不是网络专家。如果IDL是过去十年中的事情,那么该技术已经发展,并且有更好的方法可以通过网络在平台之间移动数据,继续并提出建议。

3 个答案:

答案 0 :(得分:2)

您可以使用谷歌协议缓冲区(基本上这是一种“二进制”XML,其开销较少)。

AFAIK存在c ++,java和python库。

对于嵌入式c ++系统,您可以使用NanoPb实现,它是纯C代码中的轻量级Google协议缓冲区实现(我们目前在嵌入式系统中使用该库)

请参阅https://developers.google.com/protocol-buffers/

答案 1 :(得分:1)

您还可以查看Apache ThriftCap'n'protoMsgpack

答案 2 :(得分:0)

我使用首选代码生成(definition)->server service code(definition)->client of service搜索了Web服务理念(之前已经测试过WSDL中的SOAP客户端生成)。通过这种方式,我发现Apache Thrift(btw Thrift IDL编译器是Win应用程序)。我从来没有与IDL实际接触过CORBA,只阅读了很少的材料。

我的解决方案非常小,二进制协议的高速度并不重要,但IDL和许多生成的语言(包括古代Delphi)非常非常好。主要语言首先是Java和C# - C ++,Deplhi和动态语言是未来的选择。