在Java和C ++之间进行IPC的最佳方法是什么?

时间:2020-03-06 15:03:51  来源:igfitidea点击:

我想在单个JVM应用程序(一个进程,可能有多个线程)和链接到C ++ dll的本机C ++应用程序之间实现健壮的IPC解决方案。该dll可能在同一物理计算机上,也可能不在同一物理计算机上。这样做的最佳方法是什么?

任何建议将不胜感激!谢谢!

解决方案

我将使用标准的TCP / IP套接字,该应用程序在某个端口上侦听,该库连接到该端口以报告它必须报告的内容并期望得到答案。

该抽象功能强大,得到了很好的支持,并且不会出现互操作问题。

我们是否考虑过Facebook的Thrift框架?

Thrift is a software framework for scalable cross-language services development. It combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml.
  
  Thrift allows you to define data types and service interfaces in a simple definition file. Taking that file as input, the compiler generates code to be used to easily build RPC clients and servers that communicate seamlessly across programming languages.

它可以在TCP套接字上工作,并且序列化/反序列化已内置。

请阅读白皮书以了解详细信息。

mmm DLL不是进程,因此我假设意思是Java应用程序和链接到DLL的其他某些本机应用程序之间的IPC。可以肯定的是,套接字是到达这里的方法。它将使一切变得更容易。

另一个选择是使用JNI与DCOM实现进行对话,但是我认为我们不会收获很多(除了必须处理COM和JNI的麻烦:-))。

Google协议缓冲区可以以语言和平台无关的方式序列化数据。它还将使用Java和C ++生成代码以处理读取和写入序列化数据。然后,我们可以使用任何希望发送数据的通信机制。例如,我们可以通过TCP套接字或者共享内存IPC发送它。

我正在寻找纯C ++应用程序的远程调用框架。规格看起来很漂亮而且很有前途。我要尝试一下。