私は比較的初心者のプログラマーであり、Java にも慣れていません。2 種類のアプリケーションを実行する分散システムの作成を任されています。単一の「サーバー/ルーター」と、必要な数のクライアントサーバー「ノード」。
-サーバー/ルーターは、クライアント接続情報のテーブルを維持します
-ノードは、スポーン時にそれぞれ接続情報を送信します
- ノード A は、ノード B からファイル F を要求できます。
---このリクエストはルーターに送信され、ルーターは B の接続情報を検索し、F にリクエストを送信します。
---B はルーターへの F のストリーミングを開始し、ルーターは F を A にストリーミングします。
それが一般的な考え方です。私がこれまで分散コンピューティングを行ったことがないという事実がなければ、それはかなり単純なように思えます...したがって、私の質問はコードを修正する方法の1つではなく、私の設計が機能するかどうかです(そしてそうでない場合は、どうすれば修正できますか)
したがって、私の考えは、パブリック クラス AVRouter、別のクラス AVNodeInfo、および 3 番目のクラス ConnectionMap を作成することです。AVRouter には、各ノードの名前、ポート番号、および IP アドレスを含む AVRouterInfo オブジェクトのコレクションがあります。また、ConnectionMap オブジェクトのキューもありますが、これについてはすぐに説明します。
AVRouter には、ノードが起動したときにノードから接続情報を受信し、その AVNodeInfo テーブルにそのデータを入力する専用の ServerSocket があります。ファイル要求用に別のポートがあります。リクエスターとレスポンダーの接続情報を使用して、キューに追加する ConnectionMap オブジェクトを生成します。
キューに ConnectionMaps がある間、転送を容易にするために最初のものを使用するという考えです。
最後のクラス AVNode はもっと単純です。スポーン時にその情報をルーターに送信し、ユーザー入力が別のノードとそのノードから要求したいファイルに名前を付けるのを待ちます。ルーターが利用可能になると、完成したリクエストをルーターに送信します。
AVNodeInfo テーブルを処理するためのロジックは、おそらくタイムアウトで処理されます。ノードが要求を行ってから X 時間経過すると、ノードは自動的に終了し、テーブルはテーブルからノードを削除します...これは小規模な概念実証タイプのプロジェクトであるため、この核心を扱う範囲にはまだありません。
だから私は実際に2つの質問があります:
1) このデザインは大丈夫ですか、それとも改善する必要がありますか?
2) ソース A からルーター B を介して宛先 C へのストリーミング データを、A から B へ、次に B から C への転送を実際に完了することなく、どのように正確に処理しますか?
この質問が StackOverflow の範囲内であることを願っています。コードではなくデザインであることはわかっていますが、十分に具体的だと思います。