単一のサーバーと多数のクライアントを必要とするアプリケーションを開発しています。このタスクを実行するために、Java ソケット プログラミング API を利用しています。現時点では、アプリケーションの設計全体を再構築することを検討しています。これは、アプリケーションが最も効率的な方法で構造化されているとはまったく考えていないためです。最適なパスに向けたガイダンスをいただければ幸いです。
現在の実装
ポート 5000 に1 つServerSocket
あり、ソケットを含むスレッドは継続的に実行され、あらゆる接続を受け入れます。次に、そのクライアントとの通信を処理する新しいサーバー スレッドを (使用可能なポートの同期テーブルに基づいて) 開始し、ServerSocket.accept()
再びブロックします。
このメイン スレッドから生成されるスレッドには、ServerSocket
複数の接続を一度に処理する手段として使用される も含まれます。
ここで、クライアント スレッドは単純にポート 5000 に接続し、次の使用可能なポートを応答として受信し、( を呼び出してSocket.close()
) ポート 5000 から切断し、サーバーが使用可能であると言ったポートに再接続します。
私の質問
これは、単一のサーバーで複数のクライアントを処理するための最も最適な方法ですか? ServerSocket
または、利用可能なすべてのポートで単に 's を開き、常にリッスンする必要がありますか? おそらく私がまだ考えていない何か?
補遺
MMORPG やチャット アプリケーションなどの非常に大規模なクライアント サーバー アプリケーションの観点から、実装の実現可能性を感じようとしています。たとえば、「これは機能するかもしれませんが、このアプリケーションが大規模なユーザーベースを持っている場合、それは良い解決策でしょうか?」と自問してみます。そうは言っても、たとえば何百万人ものユーザーがいる大規模な環境でソリューションがどのように機能するかを確認できれば、ソリューションの最適な性質を理解しやすくなります。