複数のクライアント接続を処理し、ゲームの状態に永続的に影響を与える小さなクライアント サーバー ベースのテキスト ゲームを作成しようとしています。コマンドがサーバーに到着した順序で処理されるように、複数の接続を処理する最善の方法は何だろうと思っています。
理想的には、少なくともコマンド処理レベルでは、マルチスレッドを利用するつもりはありません。その後、単一のスレッドで処理を統合できる限り、各クライアントが個別のスレッドを持っていても (各スレッドで IO をブロックするため)、問題ありません。
クライアントとサーバーの間の唯一の通信はテキストであるため、通信をセットアップする最善の方法がわかりません。ブロック IO を選択した場合、単一のスレッドで処理をキューに入れるにはどうすればよいでしょうか?
または、ノンブロッキング IO を選択し、セレクターを使用して、クライアントがサーバーに書き込みを行ったときにクエリを実行する場合、セットサイズの ByteBuffer を使用せずに、長さが不明/無制限の文字列を読み取るにはどうすればよいでしょうか? ノンブロッキングは、クライアント接続が新しいデータを送信するときにクライアント接続から読み取ることができるため、処理を単一のスレッドに保持することにも有利です。ただし、読み取り/書き込みUTFで実装しようとすると、IllegalBlockingModeException hehに遭遇しました。
私が言及していない方法でこれを行う方法に関する質問や提案への回答は、心から感謝します! 私はクライアントとサーバーにかなり慣れていないので、java.io と java.nio のどちらが最も適切かわかりません。
複雑な質問で申し訳ありません。自分で逃げたと思います。