【发布时间】:2011-09-04 17:39:34
【问题描述】:
对于以下情况,实现 C++/Java IPC 的最佳方式是什么?
(最近有人问了similar question,不过我的要求比较具体)
我有两个程序——一个用 C++ 编写,另一个用 Java 编写——它们需要相互通信。两者都在同一台机器上运行。
程序相互发送消息。消息通常很短(少于几百字节),但可能有 100KB 或更大的大小。
消息不需要被确认(即,不是像 HTTP 这样的请求/响应模型)。例如,C++ 程序向 Java 程序发送一条消息,Java 程序可以稍后通过向 C++ 程序发送一条消息来回复——反之亦然。
-
理想的解决方案应具有 a) 非常低的延迟,b) 没有安全问题(用户不必授权打开端口等),c) 与平台无关。
我的第一个想法是使用 sockets——每个程序都将充当另一个程序的服务器。套接字比其他形式的 IPC 开销更大,如果我让系统自动分配端口号,我不知道服务器将如何通知客户端端口号。我也考虑过命名管道,但它们不受不同平台的支持(至少不一致)。 JNI 看起来像是一个选项,但它可以跨越进程边界吗?
有什么建议吗?
谢谢!
后续问题
- 如果我使用套接字,是否需要打开 两个 套接字以允许如上所述的异步通信?
【问题讨论】:
-
在回答您的后续问题时 - 不,两种语言都支持异步 IO。
标签: java c++ sockets java-native-interface ipc