5

ネットワーク内の 2 台のマシンに Java で記述された 2 つのプロセスがあり、データの単純なチャンクを相互に渡す必要があります。


私は手っ取り早く汚い方法を探しています (ファイルの書き込みやネットワーク共有ファイルの変更のポーリングに頼ることなく)

4

9 に答える 9

6

Java RMI (リモート メソッド インターフェイス)

于 2009-01-14T16:09:30.753 に答える
2

マシンがお互いのアドレスを持っていると仮定すると(アドレスの取得は別の問題です)、最善の策はSpring remotingだと思います。データを渡すインターフェイス、渡すデータをカプセル化するドメイン オブジェクト、および両側にそのインターフェイスを実装するリモーティング サービスがあります。その後、コードはリモート サービスを別の共同作業者として扱います。安価で、簡単で、高速で、好きなトランスポート (RMI、HTTP、ヘシアン、バーラップなど) を使用できます。

通常、既存のインターフェイス/サービスをリモーティング サービスとして公開するには、約 10 分 (最長で) かかりますが、初回はもう少し時間がかかります。

于 2009-01-14T16:11:47.737 に答える
1

次に、プロセスをソケット経由で通信させるというアイデアを紹介します。ApacheのMINAパッケージを使用すると、RMIやJMSなどの大規模なシステムのオーバーヘッドなしに、この種の機能が非常にシンプルで堅牢になり、スケーラブルになります。また、メッセージのエンコードとデコードの優れたサポートも含まれています。私は中規模のシステムで非常にうまく使用しました。

この種のコミュニケーションも非常に簡単に抽象化できる傾向があります。MINAを使用するかどうかに関係なく、接続の確立/切断と接続間でのデータの移動を処理するようにクラスを設定すると、それらはおそらく非常に再利用可能になります。

于 2009-01-14T16:16:00.113 に答える
1

Terracottaは、これを行うための非常に簡単な方法であることに気付くかもしれません。Terracotta を使用すると、ヒープの一部 (HashMap など) をクラスター化して、すべてのノードでそのマップの内容を確認できます。これを設定するのはかなり簡単です。

于 2009-01-15T04:07:46.403 に答える
1

あなたが説明したのは、迅速な(実際にはそれほど迅速ではない)汚い方法です。タスクを達成する唯一の他の方法は、プロセスをリッスンしてソケットを介してデータを送信するように設定することです(あなたが直接実装したものであっても-Javaでは非常に簡単です.Googleだけで見つけるか、ライブラリの一部として-おそらく-より複雑なものには必要です)

したがって、各プロセスは特定のポートにリスナーを持ち、そのポートを介してデータを送信することがよくあります。

于 2009-01-14T16:11:15.990 に答える
0

質問は明確ではありません。使用する API またはライブラリをお探しですか? 2 台のマシンは、最初から互いのアドレスを知っていますか、それとも互いを検出する必要がありますか?

ほとんどの通信に JMS を使用できますが、すべてのマシンは、個別に実行される「ブローカー プロセス」に精通している必要があります。

于 2009-01-14T16:08:56.073 に答える
0

RMI はやや煩わしいと思います。単一のリモート オブジェクトに対して 3 つのファイルを定義する必要があり、その使用方法をまだ知らない場合は、通常の開発プロセスの範囲外のものを学習する必要があります (別のコンパイラ ステップが含まれていると思います)。

それを機能させるためのツールがあるかもしれませんが、単純なソケットを開くことをお勧めしますか? それらは使用するのが簡単にかなり近いです。

唯一の注意点は、コンピュータ間で何が流れるかを慎重に定義する必要があるということです。

于 2009-01-14T17:42:08.507 に答える
0

GaryF Spring Remoting が最良の選択肢であることに完全に同意します。それは迅速でクリーンです。Spring にまったく慣れていない場合、最初は少し時間がかかることがあります。しかし、それだけの価値があると信じてください。

于 2009-01-14T20:48:34.807 に答える