2013-07-26 15 views
7

(sürüm: Netty 4.0.4.Final)Neden ChannelOutboundHandler istisnalar exceptionCaught() yöntemi tarafından yakalanmadı? (Netty 4.0.4.Final)

bir istisna ChannelInboundHandler doğar, ben exceptionCaught() yönteminde her şeyin üstesinden gelebilecek ancak istisna ChannelOutboundHandler yılında çıkarsa, yapamam . Çünkü, exceptionCaught() bir çağrı değil. Bu neden böyle?

Orada böyle inceleyelim.Burdaki Future sonucu tarafından giden istisna işlemek için tek yol:

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

Ama çok münasebetsizcesine olduğunu.

cevap

10

Tasarım gereği ... Gelen işlemler yalnızca Gelecek üzerinden bildirilir, aksi takdirde bazı performans cezaları olan çifte bildirimler yapmamız gerekir. ExceptionCaught işleyicisine yayılmasını istiyorsanız, ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE öğesini Dinleyici olarak döndürülen ChannelFuture'a ekleyebilirsiniz.