0

ここで 2 つの一般的な質問があります。


まず、2 つの Java プログラムを実行しているとします。ほとんどレスポンダーとエグゼキューターのようなものです。

エグゼキュータは、レスポンダからコマンド、リクエストなどを発行できます。マルチスレッドを使用して両方を 1 つのプログラムとしてパックすることが可能であることはわかっていますが、レスポンダーは 1 つだけではなく、3 つ、場合によっては 0 つになることもあります。

ストリームなど、2 つのプログラムが「通信」するための最良の方法は何ですか?他のアダプターにアクセスできないことを意味しますか?


2 番目の質問:

Java プログラムが既に開いているかどうかを確認する方法はありますか? したがって、プログラムを実行すると、最初のプログラムがまだ実行されている場合、2 回目に実行することはできません。

ありがとう

4

3 に答える 3

2

プログラム間の通信レベルを選択する必要があります。Java では、最低レベルの通信はソケット API を介したものです。その上に、RMI、Corba、さまざまな Web サービスなど、さまざまなプロトコルが実装されています。

1 つのインスタンスを確実に実行するには、そのインスタンスの外部にあるものに依存する必要があります。私は考えることができます:

  • アプリの実行によって作成された外部ファイル。
  • アプリの実行によって生成されたデータベース レコード。
  • 実行中のアプリによって開かれたポート。
于 2013-02-08T20:57:22.067 に答える
2
  1. ソケットベースのソリューションを明示的にコーディングする必要があります。今日では、REST が最も明白な選択肢になると思います。より重量のあるソリューションは、JMS ベース (スタンドアロンのメッセージ キューを含み、これも socked ベース) です。

  2. はい、方法はありますが、すぐに使えるものは何もありません。通常、存在を確認する一時ファイルを作成する必要があります。低レベルの作業を処理するcreateTemporaryFileや など、いくつかの便利なメソッドが提供されています。deleteOnExit

于 2013-02-08T20:55:40.880 に答える
0

両方の質問に対する答えは、ソケットを使用することです

1- 通信には、マルチスレッドのクライアント/サーバー アプリケーションが適切なソリューションになる可能性があります

2-プログラムがすでに実行されているかどうかを確認するには、回避策として(ファイルを使用する以外に)特定のポートをリッスンできます。プログラムの別のインスタンスがこのポートをリッスンできなかった場合、プログラムがすでに実行されていることを意味します。

リッスンするポートをハードコードするのではなく、ファイルに保存して、偶然同じポートを使用する可能性のある他のアプリケーションとの競合を回避できます。

于 2013-02-08T22:16:06.697 に答える