Java和C++之间IPC的最佳方法是什么

What is the best approach for IPC between Java and C++?

本文关键字:最佳 方法 是什么 IPC C++ 之间 Java      更新时间:2023-10-16

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

如有任何建议,我们将不胜感激!谢谢

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

抽象是健壮的,支持良好,并且不会出现互操作问题。

你考虑过Facebook的Thrift框架吗?

Thrift是一个用于可扩展跨语言服务开发的软件框架。它将软件堆栈与代码生成引擎相结合,以构建在C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、Smalltalk和OCaml之间高效无缝工作的服务。

Thrift允许您在一个简单的定义文件中定义数据类型和服务接口。以该文件为输入,编译器生成代码,用于轻松构建跨编程语言无缝通信的RPC客户端和服务器。

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

有关详细信息,请阅读白皮书。

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

mmm-DLL不是进程,所以我假设你指的是Java应用程序和链接到DLL的其他本机应用程序之间的IPC。当然,插座是通往这里的必经之路。它会让你的一切变得更容易。

另一种选择是使用JNI与DCOM实现进行对话,但我认为您不会获得太多好处(除了必须处理COM和JNI:-)的头痛问题之外)。