gpt4 book ai didi

java - Netty 异常处理 - Handler throws Exception,然后呢?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:20:54 26 4
gpt4 key购买 nike

我一直在四处寻找 Netty 的异常处理模式,但找不到太多。

某种异常处理指南会很棒。我抛出的异常被发送到 exceptionCaught,但我不知道下一步该做什么。

有人可以提供有关如何在 Netty 中处理异常的通用说明。处理从 ChannelHandler 抛出的异常的预期模式是什么?

谢谢,马特

最佳答案

正如 Norman 和 Veebs 都提到的,在不了解您的确切要求的情况下,要给出准确的答案有点棘手……我认为以下内容提供了一种通用方法来处理您未预料到的服务器错误。它向客户端返回 HTTP 500“内部服务器错误”,然后关闭 channel 。显然,我假设您的客户正在通过 HTTP 请求和接收,但实际上他们可能不是,在这种情况下,Veebs 的解决方案更好。

import org.jboss.netty.channel.ChannelFutureListener;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.SimpleChannelHandler;
import org.jboss.netty.handler.codec.http.DefaultHttpResponse;
import org.jboss.netty.handler.codec.http.HttpResponse;
import org.jboss.netty.handler.codec.http.HttpResponseStatus;
import org.jboss.netty.handler.codec.http.HttpVersion;

public class ServerErrorHandler extends SimpleChannelHandler {
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)
throws Exception {
HttpResponse err = new DefaultHttpResponse(HttpVersion.HTTP_1_1,
HttpResponseStatus.INTERNAL_SERVER_ERROR);
e.getChannel().write(err).addListener(ChannelFutureListener.CLOSE);
}
}

请注意,如果您使用此解决方案,那么您还需要将 HttpResponseDecoder 添加到您的管道中。

显然,如果您有希望捕获和处理的特定异常,那么您需要在此处编写一些额外的逻辑来做到这一点。

喂!

关于java - Netty 异常处理 - Handler throws Exception,然后呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9856077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com