アプリケーションの反対側にある外部システムに接続して登録したクライアントを表すクラスのオブジェクトをインスタンス化する Java アプリケーションを作成しています。
各クライアント オブジェクトには、フロントエンドとバックエンドを表す 2 つのネストされたクラスがあります。フロントエンド クラスは継続的に実際のクライアントからデータを受信し、指示とデータをバックエンド クラスに送信します。バックエンド クラスはそのデータをフロントエンドから取得し、適切な形式とプロトコルを使用して外部システムに送信します。そのシステムが必要とします。
設計では、クライアント オブジェクトの各インスタンス化がスレッドになるようにしています。次に、各スレッド内には当然、[EDIT]それぞれ独自の NIO チャネルを持つ [/EDIT] 2 つのソケットがあり、1 つはクライアント側、もう 1 つはシステム側で、それぞれフロントエンドとバックエンドにあります。ただし、これにより、ノンブロッキング ソケットが必要になります。メインスレッドでセレクターを安全に使用して接続のあるすべてのスレッドを処理する方法を説明するチュートリアルを読んでいます。
しかし、必要なのは複数のセレクターで、それぞれが独自のスレッドで動作します。前述のチュートリアルを読んで、セレクターのキー セットはスレッドセーフではないことがわかりました。これは、それぞれにソケットとチャネルの独自のペアを与えようとすると、それぞれの個別のスレッドでインスタンス化された個別のセレクターが競合するキーを作成する可能性があることを意味しますか? セレクターをメイン スレッドに移動する可能性はわずかですが、与えられたソフトウェア要件に基づいて理想とはほど遠いものです。ご協力ありがとうございました。