可能重复:
语言/操作系统之间的进程间通信
我需要在 java 和 C++ 进程之间进行进程间通信,因为两者是不同的进程,所以我不能使用 JNI。我正在考虑使用套接字通信,但是除了套接字通信之外还有其他解决方案吗?哪个更好更快?
可能重复:
语言/操作系统之间的进程间通信
我需要在 java 和 C++ 进程之间进行进程间通信,因为两者是不同的进程,所以我不能使用 JNI。我正在考虑使用套接字通信,但是除了套接字通信之外还有其他解决方案吗?哪个更好更快?
一般来说,您有以下几种可能性(可能还有更多,但这些是“流行”的):
标准输入和输出通道。(+) 易于实现 (+) 快速 (+) 易于调试 (-) 您不能附加/分离到/从已经运行的进程
命名管道。(+) 快速 (-) 取决于系统
IPC 系统,例如 DBus。(-) 系统相关
TCP 套接字通信。(-) 较慢,但应该足够快 (+) 可以轻松扩展为远程通信 (+) 易于调试 (-) 应用程序或同一应用程序的实例之间可能存在 TCP 端口冲突。
就个人而言,我更喜欢 TCP 套接字通信,因为可以在(几乎)没有源代码更改的情况下建立远程连接。但是,必须注意不要在同一台机器上两次使用相同的端口,这是不可能的。正如您可能已经知道的那样,第二个实例将无法侦听端口。一种可能的解决方法是使用端口范围。
有许多可用的 IPC 方法,选择哪一种真正取决于您想要做什么
除了你有信号量和共享内存和管道等。但这些都不容易理解和实现,虽然我相信应该有一些库,也在操作系统级别
您是否看过ZeroMQ或者看起来更吸引我的Crossroads I/O?