次の固有の要件を持つクライアント サーバーの問題があります。 1. サーバーは既知のクライアントに対して N 個の接続を開く必要があり、クライアントはそれらの接続を使用してサーバーからデータを要求することしかできません。
これまでのところ、次のことを試みましたが、いくつかの問題に遭遇しました。
クライアントにソケット リスナーを用意し、受信した各接続を ArrayBlockingQueue にエンキューします。
クライアント アプリは、上記のキューで利用可能な接続を使用して、サーバーからデータを要求します
サーバー上のソケットごとに 1 つのスレッド (ワーカー) を作成し、N 個のワーカー スレッドを介してデータ要求をリッスンします。
ワーカー スレッド (サーバー上) で着信要求を待機するときは、InputStream.isAvailable() を使用して、読み取りを待っているものがあるかどうかを確認します。
問題: サーバー側のワーカー スレッドは、ソケット接続がまだ有効かどうかを認識していませんか? クライアントアプリでソケットが閉じられた後でも、リクエストをリッスンし続けます。
ソケット接続がまだ有効かどうかをサーバーに認識させるにはどうすればよいですか?
ここで正しいアプローチを取っていますか?
実装をより簡単に、より良くするフレームワークはありますか?