Java和C ++进程之间的通信

时间:2013-01-23 18:28:49

标签: java c++ ipc

  

可能重复:
  Inter-process communication between languages/operating systems

我需要在java和C ++进程之间进行进程间通信,因为两者都是不同的进程所以我不能使用JNI。我正在考虑使用套接字通信,但除了套接字通信之外还存在其他任何解决方案吗?哪个更好更快?

3 个答案:

答案 0 :(得分:6)

一般来说,您有以下可能性(可能会有更多,但这些是“受欢迎的”):

  • 标准输入和输出通道。(+)易于实现(+)快速(+)易于调试( - )您无法连接/分离正在运行的流程

  • 命名管道。(+)快速( - )系统相关

  • IPC系统,例如DBus。( - )系统相关

  • TCP套接字通信。( - )速度较慢,但​​应足够快(+)可以轻松扩展到远程通信(+)易于调试( - )可能的TCP端口应用程序或同一应用程序实例之间的冲突。

就个人而言,我更喜欢TCP套接字通信,因为有可能(几乎)没有源代码更改进行远程连接。但是,必须注意不要在同一台机器上使用两次相同的端口,这是不可能的。您可能已经知道,第二个实例将无法侦听端口。可能的解决方法是使用端口范围。

答案 1 :(得分:0)

您是否看过ZeroMQ或者看起来更吸引我Crossroads I/O

答案 2 :(得分:0)

有许多可用的IPC方法,选择哪一种方法真正取决于你想做什么

  1. 文件:可能是最容易实现的文件,只需要关注同步,脏读等。
  2. 信号:关于它我只能这么少,但它应该是快速通信方法,我认为实施起来比较复杂
  3. 网络:我最喜欢的方法,每个新进程/节点在spwan上打开一个新端口,更好的选择是使用类似的机制ros nodelets,它会在一个进程内激活许多“nodelets”。这是一种快速的方法,但不是实时的
  4. 除了你有信号量和共享内存和管道等。 但这些都不容易理解和实现,虽然我相信应该有一些库,也在操作系统级别