我们需要在非常不同的软件组件之间(从嵌入式设备到Web服务)发送数据。由于各种原因(事实上我们在最有问题的平台上编译Mosquitto并不是最不重要的),我们决定使用 MQTT < / strong>消息代理协议。它是一个相当轻量级的协议,为要发布的消息提供应用程序定义的 有效负载 。我们现在需要找到一种在该有效负载中 指定数据 的方法。
目前的想法是使用一些 现有IDL ,它能够至少从 C ++访问数据 和 Java ,理想情况下也是Python和其他语言。如果这些平台的 编码/解码 API可用于将数据序列化为MQTT协议的有效负载并将其反序列化,这将是理想的。
有这样的东西吗?
注意:
答案 0 :(得分:2)
您可以使用谷歌协议缓冲区(基本上这是一种“二进制”XML,其开销较少)。
AFAIK存在c ++,java和python库。
对于嵌入式c ++系统,您可以使用NanoPb实现,它是纯C代码中的轻量级Google协议缓冲区实现(我们目前在嵌入式系统中使用该库)
答案 1 :(得分:1)
您还可以查看Apache Thrift,Cap'n'proto,Msgpack
答案 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和动态语言是未来的选择。