我一直在尝试编写一个 HTTP 客户端来同时获取多个提要(最多 1k),这也是学习 Netty 4 的练习。
我的问题是,是否有一个很好的解释新的 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;
}
如果我不在 msg 上调用 BufUtil.retain,它似乎会得到 GCd,我会得到各种虚假错误。