如何在 Netty 4 的 MessageToMessageDecoder 中 discard/release 消息

How to discard/release message in MessageToMessageDecoder in Netty 4

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

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

示例代码:

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 正在接收全部需要的有效负载)

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