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

12

我希望在一个单独的JVM应用程序(一个进程,可能有多个线程)和一个链接到C++ dll的本地C++应用程序之间实现一个强大的IPC解决方案。这个dll可能在同一台物理机器上,也可能不在。如何最好地实现?

如果您有任何建议,将不胜感激!谢谢!

4个回答

9
我会使用标准的TCP/IP套接字,其中应用程序侦听某个端口,库连接到它以报告所需报告的内容并期望答案。这种抽象是稳健的,得到良好支持,并且不会有任何互操作问题。

4

Google protocol buffer可以帮助您以一种语言和平台中立的方式序列化数据。它还将生成Java和C++代码来处理读写序列化数据。然后,您可以使用任何通信机制来发送数据。例如,您可以通过TCP套接字或共享内存IPC发送它。


4

您考虑过Facebook的Thrift框架吗?

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

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

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

阅读whitepaper获取详细信息。


2
Thrift很棒,但我在这里看到他们文档的第一句话说它不能在Windows上工作...我理解得对吗?http://wiki.apache.org/thrift/ThriftInstallationWin32 - Justin
@Justin:是的,使用Visual Studio编译不通过。 - dalle
1
旧的线程,但现在thrift已经包含了Visual Studio(2010)项目。 - Kevin Shea

0

mmm - DLLs不是进程,所以我假设您的意思是在Java应用程序和某个链接到DLL的本地应用程序之间进行IPC。肯定的是,套接字是这里的最佳选择。这将使您的一切变得更容易。

另一个选择是使用JNI与DCOM实现通信,但我认为您不会获得太多好处(除了必须处理COM和JNI的头疼问题:-))。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接