2015-02-23 332 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