2013-07-26 169 views
7

(版本:Netty的4.0.4.Final)爲什麼ChannelOutboundHandler異常未被exceptionCaught()方法捕獲? (Netty的4.0.4.Final)

如果異常上升ChannelInboundHandler,我能應付在exceptionCaught()方法,但如果異常上升ChannelOutboundHandler,我不能。因爲,exceptionCaught()不是通話。這是爲什麼?

只有通過analize未來的結果來處理出站例外像這樣:

channel.writeAndFlush(serverPacket).addListener(new ChannelFutureListener() { 
     @Override 
     public void operationComplete(ChannelFuture future) throws Exception { 
      if (!future.isSuccess()) { 
       future.cause().printStackTrace(); 
      } 
     } 
}); 

但它是非常不方便的。

回答

10

它是由設計...出站操作只通過未來通知,否則我們需要做雙重通知,有一些性能損失。如果您希望將其傳播到exceptionCaught處理程序,則可以將ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE作爲偵聽器添加到返回的ChannelFuture。