2012-04-03 6 views
11

特に、チャンネルのもう一方の端が突然死んでしまう(プロセスが強制終了するなど)場合に興味があります。 Nettyが確実にチャネルのクローズ/ディスコネクトイベントを確実に起動しないように見える場合があります。接続のリセットにSocketExceptionをスローする必要はありません。は、nettyが確実にチャネルのクローズ/ディスコネクトを検出できますか?

私はチャンネルへの書き込みも試みましたが、これは例外を投げたり他のイベントを起こさずにも動作し続けます。

私はこれをウィンドウでテストしています。ネットで3.3.0.Finalと違いがあればテストします。

答えて

5

あなたが述べたように、nettyはチャンネルが閉じられているかどうかを検出できませんでした。 Hereは、この問題で言及されている同じ問題です。 証明書を解く1つの方法はheartbeat messagesです。 NettyはIdleStateHandlerでハートビートをサポートします。

また、あなたはIdleStateHandlerのためにこれらの参照を確認できます。

+0

一つの問題は、網状の陽気他で閉じられているチャネルへの書き込みを続けていることです終わり。確実にチャネルを検出して応答する唯一の方法ですか? –

+0

接続を手作業で行うと、接続が正常に動作するはずです。断線を検出するための別の方法があるかもしれませんが、これはどのような網状構造の文書でもあります。私の2番目の提案は、チャネルのsetReadableメソッドとisWritableメソッドのチェックと読み取りです。チャンネルステータスをプロデューサ内のChannel.isWritableで制御し、チャンネルをコンシューマ内でChannel.setReadableで読み取ることができます。私は確信していませんが、この最後のトリックは仕事かもしれません。 – ozhan

関連する問題