如何让2个Java应用程序相互通信?

时间:2013-04-16 11:10:18

标签: java windows sockets communication

我有2个Java应用程序。首先,我可以根据自己的意愿进行编辑,但稍后我会将其编译为机器代码。第二个我无法编辑,但我可以为它写一个插件。我需要让插件能够与第一个应用程序通信。通常只是相互发送字符串。流程的输入和输出流不是我的选择。我正在考虑使用tcp套接字客户端/服务器或作为缓冲区的文件。但是这两种方式对我来说都有点难看,有人能提出一个更好的想法吗?

3 个答案:

答案 0 :(得分:5)

这取决于您希望传输的数据类型。

如果只是字符串,那么: 如果number of process = 2如果您确定,那么stdin& 8 stdout是最好的前进方式。您可以使用Process创建ProcessBuilder,然后让流进行通信。另一个进程可以System.out来传递消息。这比Socket更受欢迎,因为你不必处理套接字等的优雅关闭(如果它失败并且端口没有成功解锁,则可能是一个很大的麻烦)

如果number of process > 2less than10,您可以使用套接字并通过Socket进行通信。这应该很好,尽管额外的工作是优雅地管理套接字。

如果number of processLarge,则应使用JMS。它做了很多你不需要处理的事情。如果进程数量较少,则任务太大。

所以在你的情况下,过程是最好的前进方式。

如果您要传输的数据,甚至可以是对象。可以使用RMI,因为进程数较少。如果更多,请再次使用JMS

编辑:现在对于上述所有内容,涉及到很多肮脏的工作。如果您正在寻找新的东西,那么令人兴奋,我会建议akka。它是一个基于actor的模型,它使用Messages进行相互通信。

美丽的是,演员可以在同一个JVM或另一个(非常小的配置)上,而akka会照顾好你的其余部分。我没有看到比这样做更清洁的方式:)

答案 1 :(得分:1)

如何使用JMS?

您可以根据需要使用Publish / Sunbscribe或Point-to-Point模型。

答案 2 :(得分:0)

另一种方法是使用DB表来存储数据,一个进程可以插入,其他进程可以在需要时读取它。当您使用JMS时,丢失数据的可能性很大,但在db中存储将是故障安全和未来证明。