(版本:Netty 4.0.4.Final)
如果ChannelInboundHandler
中出现异常,则可以使用exceptionCaught()
方法处理它,但是如果ChannelOutboundHandler
中出现异常,则不能。因为exceptionCaught()
不是呼叫。为什么会这样呢?
只有通过分析Future结果的方式来处理出站异常,如下所示:
channel.writeAndFlush(serverPacket).addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future) throws Exception {
if (!future.isSuccess()) {
future.cause().printStackTrace();
}
}
});
但这是非常不便的。
最佳答案
这是设计使然...出站操作仅通过Future进行通知,否则我们将需要执行两次通知,这会降低性能。如果要将其传播到exceptionCaught处理程序,则只需将ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE作为侦听器添加到返回的ChannelFuture。