我一直在尝试编写一个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方法,它似乎会被垃圾回收(GC)并且我会遇到各种错误。