-2

仮想ネットワークをプログラミングしています。
ネットワーク全体を実装し、ネットワーク内の特定の他のクライアントとの間でデータを送受信できる中央の Client クラスがあります。ネットワークを使用するすべてのプログラムに対して Client クラスの単一のインスタンスを使用したくありません。プログラムが着信パケットを処理するためのインターフェイスと、送信用のラッパーを持っているので、「ローカル TCP サーバーを実行する」以外の解決策をいただければ幸いです。

私の質問は次のとおりです:Javaでそれを使用するすべてのプログラムに対して実行されるクラスの単一のインスタンスをどのように持つことができますか?

4

1 に答える 1

0

これは、Java で使用可能な RMI、RMI-IIOP、または CORBA 機能を使用して簡単に実行できます。上記のテクノロジーにより、単一のマシン(サーバー)でオブジェクトの単一のインスタンスを作成し、それをリモートインターフェイスとして他のコンピューター(ネットワークが必要だと言います)にエクスポートできます。他のホストでは、「実際の」インスタンスが実装するのと同じインターフェースを持つスタブ クラスがあり、その上でメソッドを呼び出すことができます。これらの呼び出しは、サーバントの単一インスタンスで最後にリモートで呼び出されます。おそらく、これはまさにあなたが求めているものです。

より新しい、より興味深いアプローチから、Google Protocol Buffers は注目に値するもののように見えますが、Protocol Buffers を使用したカスタム コードがさらに必要になります。Web サービスはインターフェイスのエクスポートも許可し、ファイアウォールを通過するのにより適しています (ここにリストされている他のアプローチは、必要に応じて構成できる独自のサーバー間で通信するのにより適しています)。

特定のオペレーティング システムでプログラムのインスタンスを 1 つだけ実行する必要がある場合は、この質問で説明されているように実行できます。プログラムが固定ポートでリッスンしている場合、ポートが既に使用されているため、2 番目のインスタンスはおそらく適切に起動しません。必要なのは、靴下をバインドして終了しようとしたときに例外をキャッチすることだけです。

于 2013-01-12T21:08:17.240 に答える