Netty 4 を学習するための演習として、同時に複数のフィード (最大 1k) をフェッチする HTTP クライアントを作成しようとしています。
私の質問は、新しい ByteBuf インフラストラクチャがどのように機能するかについて、どこかに適切な説明があるかどうかです。誰がそれらを「所有」し、どのように共有されますか? ChannelPipeline のすべての ChannelHandler には独自の ByteBuf がありますか?
これが私を当惑させた例です:
次のクラスのインスタンスを HTTP クライアント パイプラインに追加しました。
public class MyFilter extends MessageToMessageDecoder<HttpObject> {
@Override
protected Object decode(ChannelHandlerContext ctx, HttpObject msg) throws Exception {
// do some work, but leave msg unchanged
BufUtil.retain(msg); // Why do I need to call BufUtil.retain(msg) ???
return msg;
}
メッセージで BufUtil.retain を呼び出さないと、GCd が発生したように見え、あらゆる種類の偽のエラーが発生します。