如何在 Netty 4 的 MessageToMessageDecoder 中 discard/release 消息
How to discard/release message in MessageToMessageDecoder in Netty 4
如果我想在 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 正在接收全部需要的有效负载)
释放是由 MessageToMessageDecoder 本身为您完成的。所以你可能唯一想做的就是抛出异常或类似的东西。
如果我想在 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 正在接收全部需要的有效负载)
释放是由 MessageToMessageDecoder 本身为您完成的。所以你可能唯一想做的就是抛出异常或类似的东西。