7

(版本:Netty 4.0.4.Final)

如果出现异常ChannelInboundHandler,我可以在方法中处理它,exceptionCaught()但如果出现异常ChannelOutboundHandler,我不能。因为,exceptionCaught()不是一个电话。为什么会这样?

只有通过分析未来结果来处理出站异常,如下所示:

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

但这非常不方便。

4

1 回答 1

11

这是设计使然...仅通过 Future 通知出站操作,否则我们将需要执行双重通知,这会带来一些性能损失。如果您想让它传播到异常捕获处理程序,您只需将 ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE 作为侦听器添加到返回的 ChannelFuture。

于 2013-07-26T10:58:08.430 回答