私はいくつかのサーバーへのTCP/IP接続を作成して維持するミドルウェアアプリケーションを開発中です。アプリケーションが接続が失われたことを検出すると、接続が再確立されるまでタイマーで再接続を試みます。Java NIOソケットアプリケーション:SocketChannelを再利用するか、紛失した接続を破棄しますか?
アプリケーションは、非ブロックモードでjava.nio.SocketChannelオブジェクトを使用しており、セレクタ/ SelectionKeyを使用してソケットイベントを処理しています。
一度接続が失われたら、現在のSocketChannelオブジェクトを捨てて、再接続する(新しいSelectionKeyを取得する)か、同じSocketChannelとSelectionKeyを再利用する方が良いでしょうか?接続が再び確立されるまで)?
簡単に言えば、SocketChanngel – bestsss
を再利用することはできません。ありがとう!私には驚きましたが、SocketChannelは接続が失われた後でもisConnected()を報告します。接続が確立されていれば、 'isConnected()'が閉じていなければ –
を返します。例外を受け取った後、またはEOF(-1)を受け取った後は、チャンネルを閉じるだけです。 – bestsss