跨平台发送大量数据的好方法是什么?
What's a good means to send lots of data across platforms?
我们需要在非常不同的软件组件(从嵌入式设备到 Web 服务)之间发送数据。由于各种原因(事实上我们得到了 Mosquitto to compile on the most problematic platform not being the least of them), we decided to use the MQTT 消息代理协议。它是一个相当轻量级的协议,它提供了应用程序定义的 有效负载 用于要发布的消息。我们现在需要找到一种方法来 指定该有效负载中的数据 .
目前的想法是使用一些 现有的 IDL 至少可以从 C++ 和 Java,理想情况下也是 Python 和其他语言。如果这将与这些平台的 encoding/decoding API 一起提供,这些 API 可用于将数据序列化为,并将其反序列化, MQTT 协议的负载,这将是理想的。
有这样的东西吗?
注:
- 会有很多数据。事实上,我们可能需要将其从当前规范中删除,以避免网络拥塞。 XML 格式对此可能过于冗长。
- 格式应该易于编码和解码,因为在嵌入式平台上 CPU 份额很有价值。 (这可能是不通过网络发送 XML 的另一个原因。)
- 如果此所需的任何组件(IDL 编译器等)不是跨平台的,它应该 运行 Windows。
- 我不是网络专家。如果 IDL 是过去十年的事情,技术已经发展,并且有更好的方法通过网络在平台之间移动数据,请继续并提出建议。
您可以使用 google 协议缓冲区(本质上这是一种 "binary" XML,开销要少得多)。
据我所知,存在 c++、java 和 python 库。
对于嵌入式 C++ 系统,您可以使用 NanoPb 实现,它是纯 C 代码中的轻量级 google 协议缓冲区实现(我们目前在嵌入式系统中使用该库)
您也可以检查Apache Thrift, Cap'n'proto, Msgpack
我有使用首选代码生成 (definition)->server service code
和 (definition)->client of service
的搜索网络服务哲学(之前测试过从 WSDL 生成 SOAP 客户端)。通过这种方式,我找到了 Apache Thrift(顺便说一句,Thrift IDL 编译器是 Win 应用程序)。我从来没有用IDL实际接触过CORBA,只看了很少的资料。
我的解决方案非常小,二进制协议的高速不是太重要,但 IDL 和许多生成的语言包括古老的 Delphi 非常非常好。最初的主要语言是 Java 和 C# - C++,Deplhi 和动态语言是未来的选择。
我们需要在非常不同的软件组件(从嵌入式设备到 Web 服务)之间发送数据。由于各种原因(事实上我们得到了 Mosquitto to compile on the most problematic platform not being the least of them), we decided to use the MQTT 消息代理协议。它是一个相当轻量级的协议,它提供了应用程序定义的 有效负载 用于要发布的消息。我们现在需要找到一种方法来 指定该有效负载中的数据 .
目前的想法是使用一些 现有的 IDL 至少可以从 C++ 和 Java,理想情况下也是 Python 和其他语言。如果这将与这些平台的 encoding/decoding API 一起提供,这些 API 可用于将数据序列化为,并将其反序列化, MQTT 协议的负载,这将是理想的。
有这样的东西吗?
注:
- 会有很多数据。事实上,我们可能需要将其从当前规范中删除,以避免网络拥塞。 XML 格式对此可能过于冗长。
- 格式应该易于编码和解码,因为在嵌入式平台上 CPU 份额很有价值。 (这可能是不通过网络发送 XML 的另一个原因。)
- 如果此所需的任何组件(IDL 编译器等)不是跨平台的,它应该 运行 Windows。
- 我不是网络专家。如果 IDL 是过去十年的事情,技术已经发展,并且有更好的方法通过网络在平台之间移动数据,请继续并提出建议。
您可以使用 google 协议缓冲区(本质上这是一种 "binary" XML,开销要少得多)。
据我所知,存在 c++、java 和 python 库。
对于嵌入式 C++ 系统,您可以使用 NanoPb 实现,它是纯 C 代码中的轻量级 google 协议缓冲区实现(我们目前在嵌入式系统中使用该库)
您也可以检查Apache Thrift, Cap'n'proto, Msgpack
我有使用首选代码生成 (definition)->server service code
和 (definition)->client of service
的搜索网络服务哲学(之前测试过从 WSDL 生成 SOAP 客户端)。通过这种方式,我找到了 Apache Thrift(顺便说一句,Thrift IDL 编译器是 Win 应用程序)。我从来没有用IDL实际接触过CORBA,只看了很少的资料。
我的解决方案非常小,二进制协议的高速不是太重要,但 IDL 和许多生成的语言包括古老的 Delphi 非常非常好。最初的主要语言是 Java 和 C# - C++,Deplhi 和动态语言是未来的选择。