我在这里有 2 个一般性问题:
首先,假设我有 2 个 Java 程序正在运行。几乎就像一个响应者和一个执行者。
执行者可以从响应者发出命令、请求等。我知道可以通过多线程将它们都打包为一个程序,但不一定只有 1 个响应者,可能有 3 个,甚至可能是 0 个响应者。
这两个程序“通信”(例如流)的最佳方式是什么,这意味着我无法访问其他适配器?
第二个问题:
有没有办法检查 Java 程序是否已经打开?因此,如果我运行一个程序,如果第一个程序仍在运行,我将无法第二次运行它。
谢谢
我在这里有 2 个一般性问题:
首先,假设我有 2 个 Java 程序正在运行。几乎就像一个响应者和一个执行者。
执行者可以从响应者发出命令、请求等。我知道可以通过多线程将它们都打包为一个程序,但不一定只有 1 个响应者,可能有 3 个,甚至可能是 0 个响应者。
这两个程序“通信”(例如流)的最佳方式是什么,这意味着我无法访问其他适配器?
第二个问题:
有没有办法检查 Java 程序是否已经打开?因此,如果我运行一个程序,如果第一个程序仍在运行,我将无法第二次运行它。
谢谢
您必须明确编写基于套接字的解决方案。今天我想 REST 将是最明显的选择。一个更重量级的解决方案是基于 JMS 的(涉及一个独立的消息队列,也基于 socked)。
是的,有一种方法,但没有开箱即用的方法。它通常涉及创建检查是否存在的临时文件。提供了一些方便的方法,例如createTemporaryFile
处理deleteOnExit
低级工作的方法。
您必须选择程序之间的通信级别。在 Java 中,最低级别的通信将通过 Socket API。除此之外,还实现了许多其他协议:RMI、Corba、各种 Web 服务等。
为了确保 1 个实例运行,您必须依赖该实例之外的东西。我能想到:
您的两个问题的答案都可以使用 Sockets
1-对于通信,多线程客户端/服务器应用程序可能是一个很好的解决方案
2-要检查程序是否已经在运行,作为一种解决方法(除了使用文件),您可以侦听某个端口,因此如果程序的另一个实例未能侦听此端口,则意味着程序已经在运行。
您可以将侦听的端口存储在文件中,而不是对其进行硬编码,以避免与可能偶然使用相同端口的其他应用程序发生冲突。