如何在Netty 4中的MessageToMessageDecoder中丢弃/释放消息

时间:2015-02-23 13:26:03

标签: java netty

如果在我的decode方法中我想要丢弃该消息(例如,如果此客户端不支持此类消息),我该怎么办?换句话说,我不想将解码的消息传递给另一个(业务)处理程序。

为了避免内存泄漏并与解码器的实现保持一致,我应该:

  • 使用byteBuf.realease()/ ReferenceCountUtil.release(byteBuf)
  • 调用super.channelReadComplete()或其他一些函数
  • 做点什么吗?

示例代码:

public class MyMessageDecoder extends MessageToMessageDecoder {
    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
        ....
        if (allowedTypes.containsKey(msgType)) {
            ...
            out.add(...);
        } else {
            //what to do here to discard this this message
        }
    }
}

我正在使用netty 4.0.25并且我的解码器前面有LengthFieldBasedFrameDecoder(所以MyMessageDecoder正在接收所需的有效负载)

1 个答案:

答案 0 :(得分:0)

MessageToMessageDecoder本身为您完成了释放。所以你唯一想做的就是抛出异常或类似的东西。