0

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


首先,假设我有 2 个 Java 程序正在运行。几乎就像一个响应者和一个执行者。

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

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


第二个问题:

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

谢谢

4

3 回答 3

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

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

于 2013-02-08T20:55:40.880 回答
2

您必须选择程序之间的通信级别。在 Java 中,最低级别的通信将通过 Socket API。除此之外,还实现了许多其他协议:RMI、Corba、各种 Web 服务等。

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

  • 运行应用程序创建的外部文件。
  • 运行应用程序产生的数据库记录。
  • 由您正在运行的应用程序打开的端口。
于 2013-02-08T20:57:22.067 回答
0

您的两个问题的答案都可以使用 Sockets

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

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

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

于 2013-02-08T22:16:06.697 回答