私はこのようなインバウンドチャネルハンドラがあるとします。exceptionCaught
のでNetty 4では、ハンドラ内で例外がスローされたときに、参照カウントされたオブジェクトをどのように処理するのですか?
public class Handler extends ChannelInboundHandlerAdapter {
@Override
protected void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
// msg is actually a reference counted object
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
// Handle exception here, can't release msg since it's not passed.
}
}
は、その署名にインバウンドメッセージを受信しない参照カウントオブジェクトが解放されることを保証する方法がないように、それはそうです。 channelRead
の全内容をtry/catchブロックにラップして、プロセス全体を終了せずに例外を適切に回復できることを確認しているようです。これは本当ですか?
try/finallyで 'channelRead()'メソッド全体をラップする必要がある場合、 'exceptionCaught()'のポイントは何ですか?伝播する例外をキャッチしますか?参照カウント項目を解放する必要がないという要件を持たない他のハンドラメソッドからの例外をキャッチしますか? –
'exceptionCaught'は例外の中心点です。' channelRead'からの例外だけでなく、 'channelWrite'のようなハンドラの他のメソッドや他のハンドラからの例外でも例外がスローされます。あなたは、例外的な苦境への書き込み中に低レベルのNIO例外を投げるようにネティを構成することさえできる。代わりに、 'ChannelInboundHandlerAdapter'ではなく' SimpleChannelInboundHandler'を拡張することができ、それはあなたの参照カウントされたオブジェクトを閉じます – Ferrybig
ところで、もう一度ありがとうございます。申し訳ありません、あまりにも早く投票しませんでした:) –