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