0
如果在我想要放弃消息的decode
方法中(例如,如果此类消息不受此客户端支持),我应该怎么做?换句话说,我不想将解码的消息传递给另一个(业务)处理程序。如何在Netty 4中的MessageToMessageDecoder中丢弃/释放消息
为了避免内存泄漏,并与解码器的实现我应该是一致的:)
- 使用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
}
}
}
我使用的是网状4.0.25和我的解码器被换成了LengthFieldBasedFrameDecoder(所以MyMessageDecoder正在接收整体所需要的有效载荷)
谢谢诺曼。如果它是ByteToMessageDecoder呢?只要收到完整的有效载荷,就会被调用很多次,所以我不能像上面的例子那样离开它。 – ANTARA 2015-02-24 18:38:35