2

我有 2 个 Java 应用程序。首先,我可以尽可能多地进行编辑,但稍后我会将其编译为机器代码。第二个我无法编辑,但我可以为它写一个插件。我需要使该插件能够与第一个应用程序交谈。通常只是简单地相互发送字符串。进程的输入和输出流对我来说不是一个选项。我正在考虑使用 tcp 套接字客户端/服务器或将充当缓冲区的文件。但是这两种方式对我来说似乎有点难看,有人能给我一个更好的主意吗?

4

3 回答 3

5

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

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

如果说number of process > 2,您可能可以使用 Sockets 并通过 Socket 进行通信。这应该可以很好地工作,尽管在优雅地管理套接字方面需要付出额外的努力。less than10

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

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

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

编辑:现在对于以上所有内容,都涉及很多肮脏的工作。作为改变,如果你正在寻找新的和令人兴奋的东西,我会建议 akka。它是一个基于actor的模型,使用消息相互通信。

美妙之处在于,演员可以在同一个 JVM 或另一个(非常少的配置)上,而 akka 会为您处理其余的事情。我还没有看到比这样做更清洁的方法:)

于 2013-04-16T11:15:39.720 回答
1

使用 JMS 怎么样?

您可以根据需要使用 Publish/Sunbscribe 或点对点模型。

于 2013-04-16T11:14:41.560 回答
0

另一种方法是使用数据库表来存储您的数据,一个进程可以插入,而另一个进程可以在需要时读取它。当您使用 JMS 时,可能会丢失数据,但存储在 db 中将是故障安全且面向未来的。

于 2013-04-16T11:40:58.337 回答