10

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 が発生したように見え、あらゆる種類の偽のエラーが発生します。

4

1 に答える 1