2015-02-23 326 views
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正在接收整體所需要的有效載荷)

回答

0

釋放是爲你做MessageToMessageDecoder本身。所以你唯一想做的事情就是拋出異常或類似的東西。

+0

謝謝諾曼。如果它是ByteToMessageDecoder呢?只要收到完整的有效載荷,就會被調用很多次,所以我不能像上面的例子那樣離開它。 – ANTARA 2015-02-24 18:38:35