3

可能重复:
语言/操作系统之间的进程间通信

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

4

3 回答 3

6

一般来说,您有以下几种可能性(可能还有更多,但这些是“流行”的):

  • 标准输入和输出通道。(+) 易于实现 (+) 快速 (+) 易于调试 (-) 您不能附加/分离到/从已经运行的进程

  • 命名管道。(+) 快速 (-) 取决于系统

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

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

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

于 2013-01-23T18:37:27.043 回答
0

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

  1. 文件:可能是最容易实现的一个,只有你需要关心同步、脏读等。
  2. 信号:我只能说很少,但它应该是快速的通信方式,我相信实现起来更复杂
  3. 网络:我最喜欢的方法,每个新进程/节点在 spwan 上打开一个新端口,更好的选择是使用类似于ros nodelets的机制,它在一个进程中触发许多“nodelet”。这是一种快速的方法,但不是实时的

除了你有信号量和共享内存和管道等。但这些都不容易理解和实现,虽然我相信应该有一些库,也在操作系统级别

于 2013-01-23T18:38:32.300 回答
0

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

于 2013-01-23T18:36:57.967 回答