Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';什么是跨平台发送大量数据的好方法?_Java_C++_Cross Platform_Idl - Fatal编程技术网

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

Java 什么';什么是跨平台发送大量数据的好方法?,java,c++,cross-platform,idl,Java,C++,Cross Platform,Idl,我们需要在非常不同的软件组件(从嵌入式设备到Web服务)之间发送数据。出于各种原因(事实上,我们是在问题最严重的平台上编译的,而不是最小的平台),我们决定使用消息代理协议。它是一个相当轻量级的协议,为要发布的消息提供应用程序定义的有效负载。我们现在需要找到一种方法来指定该有效负载中的数据 当前的想法是使用一些现有的,它至少可以从C++和Java访问数据,理想情况下还可以使用Python和其他语言。如果这些平台的编码/解码API可以用来将数据序列化到MQTT协议的有效负载中,并将其反序列化出来,那

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

当前的想法是使用一些现有的,它至少可以从C++Java访问数据,理想情况下还可以使用Python和其他语言。如果这些平台的编码/解码API可以用来将数据序列化到MQTT协议的有效负载中,并将其反序列化出来,那么这将是理想的

有这样的吗

注:

  • 将会有很多数据。事实上,为了避免网络拥塞,我们可能需要将其从当前规范中删减。XML格式对此可能过于健谈
  • 这种格式应该易于编码和解码,因为在嵌入式平台上,CPU共享是有价值的。(这可能是不通过网络发送XML的另一个原因。)
  • 如果此操作所需的任何组件(IDL编译器等)不是跨平台的,则应在Windows上运行
  • 我不是网络专家。如果IDL是过去十年中的一件事,那么这项技术已经向前发展了,而且有更好的方法通过网络在平台之间移动数据,那么继续并提出建议吧
您可以使用google协议缓冲区(本质上这是一种开销小得多的“二进制”XML)

AFE中存在C++、java和python库。 对于嵌入式C++系统,可以使用NoMB实现,它是一个轻量级谷歌协议缓冲区实现的纯C代码(我们目前在我们的嵌入式系统中使用该库)


参见您也可以检查,

我有搜索Web服务的理念,具有首选的代码生成
(定义)->服务器服务代码
(定义)->服务客户机
(以前测试过从WSDL生成SOAP客户机)。通过这种方式,我找到了ApacheThrift(顺便说一句,Thrift IDL编译器是Win应用程序)。我从未用IDL实际接触过CORBA,只读了很少的资料


我的解决方案非常小,二进制协议的高速并不重要,但IDL和许多生成的语言,包括古老的Delphi,都非常非常好。主要语言是java和C++语言,Duffi和动态语言是未来的选择。它是纯文本的,很容易解码。我不太喜欢IDL给项目增加的复杂性。我在网络链接中使用XML和JSON文档/对象,并在某些场景中使用数据的自定义二进制封装和压缩来提高效率。很容易处理版本控制。我现在倾向于使用JSON,以便于使用基于web的技术进行通信和演示。JSON可以比XML稍微少一点“健谈”,但并不显著。解析器和编码器很容易用简单的库在面向对象的代码中处理。@r4phG:我不知道。我不需要使用JSON,但据我所知,它可能在任何语言/平台上都可用。不过,我担心文本协议生成的字节太多,解析时间太长。你怎么看?正如@Mark提到的,它只是比XML少了一点,但它仍然是跨平台的,易于使用。但我不知道在你的例子中“太多字节”的限制:)@r4phG:目前我们获取的数据足够多,限制我们生产多少的因素是机器处理数据的能力,以及足够快地将数据写入本地闪存的能力。您还需要考虑,我们想在高EMI环境中操作的一些网络,其中一些可能阻止GB以太网可靠地运行。另外,在一个嵌入式设备上解析JSON需要消耗多少CPU百分比,而这个嵌入式设备上的RT操作系统必须安排高优先级任务(通过工业总线获取数据)和一位数的毫秒周期?协议缓冲区的东西看起来很有趣。我现在正在阅读。这是我们一直走的路线。谢谢你指出这一点!谢谢我还没有充分了解Apache Thrift。Copn原型看起来很有趣,但是在C++中它需要C++ 11(我们在所有平台上都没有)。在MessagePack中,与其他非编译数据描述语言(如JSON)一样,所有数据都是动态类型化的。(由于需要从字符串转换而来,因此使用它的CPU强度相对较高。