在Windows操作系统环境下,C++应用程序和Java应用程序之间的进程间通信

6
我们在Windows上有一个C++应用程序,它启动了一个Java进程。这两个应用程序需要通过一些XML片段进行通信。
您会选择哪种进程间通信方法?为什么?
我们可以采用以下几种方法:共享文件、管道和套接字(虽然我认为这可能存在一些安全问题)。我也可以接受其他的方法。
4个回答

9
我不确定为什么您认为基于套接字的通信会存在安全问题(使用SSL)。假设您有一个明确定义的通信协议,这通常是一种非常好的方法,因为它是语言无关的。例如,看看Google的protocol buffers - 它们会生成所需的Java类和流。
根据我的经验,文件系统(特别是网络文件系统)不适合进行此类通信,因为它们不一定针对消息传递进行调整(例如,我曾见过缓存问题导致目标进程未能获取文件)。
另一个选择是使用消息传递层(例如AMQ或Tibco),尽管这可能需要更大的管理开销(以及专业知识)来设置。
个人而言,我会选择纯套接字方法,因为它具有灵活性和简单性。您将完全掌控

3

我曾经使用命名管道在C#和跨平台c++应用程序之间进行通信,并取得了不错的结果。但是,如果不能使用命名管道,则套接字绝对是最好的选择。


2
套接字很好用。它们使您能够非常轻松地创建黑盒测试层以及在单独的计算机上运行每个组件。
安全性绝对是一个问题,但取决于其重要性,有各种各样的选项可供选择。您可以使用SSL、自定义握手、密码保护的登录和防火墙来帮助确保安全。
编辑:虽然不是我推荐的,但也可以使用JNI共享内存。只是想提一下,因为它不在您的列表中。

1

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