接続ソケットごとに 1 つのスレッドを使用してリクエストを同時に処理するサーバーを作成しました。しかし、将来的には大きくなる可能性があるため、スレッドが非常に高価である限り、よりスケーラブルなものに変更することにしました。raw NIO、Netty のような NIO フレームワーク、または Java SE7 の非同期 IO の 3 つのオプションについて読みました。しかし、私はそれらのいずれも使用したことがないので、自分のタスクにどれをどのように使用すればよいか混乱しています。タスクは非常に簡単です。
接続を受け付けるサーバーがあります。それを受け入れると、着信リクエストにリスナーのようなものを割り当てる必要があります(現在、スレッドはそのように機能します)。すなわち。接続がある場合、新しいスレッドは割り当てられません。しかし、フォーマットされたリクエストが来ると、何らかの形で JVM が必要なリスナー (チャネルまたはソケットに関連付けられている) を呼び出し、リクエストを処理します。その後、スレッドはプールまたは sth に返され、リスナーも着信要求を待機します。10,000 人以上のリスナーがいる可能性があります。また、サーバー自体がいつでも非同期でクライアントにメッセージを送信する可能性があります (そのため、プールから接続を見つけてメッセージを送信する必要があります)。または、メッセージを 1,000 以上のクライアントにマルチキャストします。サーバーはカスタム プロトコルを受け入れるため、いくつかの接続切断機能やメッセージ サイズ機能もおまけです。
これについて上記のオプションを確認しようとしましたが、それらのいずれかを使用したことがない限り、どれが自分のニーズに最も適しているかがわかりませんでした. Netty を確認したところ、非常に重量級のようです。私のタスクは NIO または NIO2 で簡単に達成できますか? それとも、MINA や Netty のように sth を使用しますか? プログラミングのミスを簡単に回避できるのであれば、NIO のような Java の raw API に固執したいと思います。しかし、エラーが発生しやすい場合は、Netty を使用したほうがよいでしょうか?