(版本: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。
关于exception-handling - 为什么 ChannelOutboundHandler 异常没有被 exceptionCaught() 方法捕获? (Netty 4.0.4.Final),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17877611/