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

bla*_*ack 2 java sockets windows communication

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

Jat*_*tin 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照顾其余的你.我没有看到比这更干净的方式:)