程序之间的沟通

时间:2013-02-08 20:51:39

标签: java

我在这里有两个一般性问题:


首先,假设我运行了2个java程序。几乎像响应者和执行者。

执行者可以从响应者发出命令,请求等。我知道可以通过多线程将它们打包为一个程序,但是可能不会只有1个响应者,可能有3个,甚至可能是0个响应者。

两个程序进行“通信”(例如流)的最佳方式是什么,这意味着我无法访问其他适配器?


第二个问题:

有没有办法检查Java程序是否已经打开?因此,如果我运行一个程序,如果第一个程序仍在运行,我就无法再次运行它。

感谢

3 个答案:

答案 0 :(得分:2)

  1. 您必须显式编写基于套接字的解决方案。今天我想REST将是最明显的选择。更重要的解决方案是基于JMS(涉及独立的消息队列,也基于socked)。

  2. 是的,有办法,但没有开箱即用。它通常涉及创建检查存在的临时文件。提供了一些方便的方法,例如createTemporaryFiledeleteOnExit来处理低级别的工作。

答案 1 :(得分:2)

您必须选择程序之间的通信级别。 在Java中,最低级别的通信将通过Socket API实现。 最重要的是,还实现了一系列其他协议:RMI,Corba,各种Web服务等。

为了确保一个实例运行,你必须依赖于该实例之外的东西。我能想到:

  • 通过运行应用程序创建的外部文件。
  • 通过运行应用程序生成的数据库记录。
  • 您正在运行的应用程序打开端口。

答案 2 :(得分:0)

您的两个问题的答案都可以使用套接字

1-对于通信,多线程客户端/服务器应用程序可以是一个很好的解决方案

2-要检查程序是否已在运行,作为一种解决方法(在使用文件旁边),您可以侦听某个端口,因此如果该程序的另一个实例未能侦听此端口,则表示该程序已在运行

您可以将您收听的端口存储在文件中,而不是对其进行硬编码,以避免与可能偶然使用相同端口的其他应用程序发生冲突。