• 小不点
    2019-11-08
    终于实战了,源码看的我头都大了,强忍着自己看完,不过还是有收获的,计划是实战完之后再战源码的,打卡,下周三见!!!

    作者回复: 你打卡打的真心不错!

    
     1
  • btshanghaib
    2020-01-14
    这里请教老师一个问题,在 OrderProtocolDecoder 里,原始传入的ByteBuf 已经被转成 RequestMessage 了,而这个 ByteBuf 后面页不会再被接下来的Handler使用,不是应该手动释放release它吗?转换成的 RequestMessage 本身并不是一个ReferenceCounted, 在SimpleChannelInboundHandler 对它release应该是没有效果的吧? 这里应该怎么理解呢?

    作者回复: 1 应该释放,你没有看到释放,是因为在它继承的父类中:
    MessageToMessageDecoder#channelRead
                    try {
                        decode(ctx, cast, out);
                    } finally {
                        ReferenceCountUtil.release(cast);
    }

    2 没有效果,因为它的实现是这样的:
            if (msg instanceof ReferenceCounted) {
                return ((ReferenceCounted) msg).release();
            }

    好处就是不用管这些细致末节了,直接release,需要release的会释放,不需要的(没有实现ReferenceCounted)不释放。所以对我们来说省心友好。

    
    
  • 空白
    2019-11-30
    OrderServerProcessHandler中传入的参数是RequestMessage,不是ByteBuf ,SimpleChannelInboundHandler也会帮忙释放?

    作者回复: 是的,因为finally语句中会尝试释放,但是肯定不执行释放因为释放的时候会判断:
        public static boolean release(Object msg) {
            if (msg instanceof ReferenceCounted) {
                return ((ReferenceCounted) msg).release();
            }
            return false;
        }

    
    
我们在线,来聊聊吧