2012-02-02 13 views
0

私はいくつかのサーバーへのTCP/IP接続を作成して維持するミドルウェアアプリケーションを開発中です。アプリケーションが接続が失われたことを検出すると、接続が再確立されるまでタイマーで再接続を試みます。Java NIOソケットアプリケーション:SocketChannelを再利用するか、紛失した接続を破棄しますか?

アプリケーションは、非ブロックモードでjava.nio.SocketChannelオブジェクトを使用しており、セレクタ/ SelectionKeyを使用してソケットイベントを処理しています。

一度接続が失われたら、現在のSocketChannelオブジェクトを捨てて、再接続する(新しいSelectionKeyを取得する)か、同じSocketChannelとSelectionKeyを再利用する方が良いでしょうか?接続が再び確立されるまで)?

+0

簡単に言えば、SocketChanngel – bestsss

+0

を再利用することはできません。ありがとう!私には驚きましたが、SocketChannelは接続が失われた後でもisConnected()を報告します。接続が確立されていれば、 'isConnected()'が閉じていなければ –

+0

を返します。例外を受け取った後、またはEOF(-1)を受け取った後は、チャンネルを閉じるだけです。 – bestsss

答えて

2

あなたはそれを投棄しなければなりません。接続が失われた場合は、最後にSocketChannelを閉じて接続を正しくクリーンアップする必要があります。あなたが再接続しようとするならば、ちょうどあなたが初めて行ったこと(createSocket、非ブロッキング、init接続など)をしてください。

関連する問題