在我的netty处理程序中,我覆盖了exceptionCaught方法来捕获由netty ObjectDecoder抛出的TooLongFrameException。在出现异常的情况下,我会向服务器发送一条消息,告知该错误的相关信息。服务器收到该消息,然后尝试继续发送更多数据。问题是,我的处理程序似乎没有继续读取数据。
我使用netty 4.1.18最终版
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.codec.TooLongFrameException;
public final class MyHandler extends SimpleChannelInboundHandler<MyObject> {
@Override
protected void channelRead0(ChannelHandlerContext channelHandlerContext, MyObject obj) throws Exception {
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
if (cause instanceof TooLongFrameException) {
ctx.writeAndFlush( messageAboutError );
return;
} else
ctx.writeAndFlush( messageAboutUnexpectedError );
super.exceptionCaught(ctx, cause);
}
}
在我捕获到netty ObjectDecoder抛出的异常后,如何让我的处理程序继续读取数据?
真正的问题是,一旦您处于这种状态,ObjectDecoder
将出现一个混乱的“解码状态”,因此除了断开连接之外,您没有什么可以做的。如果您要使用另一种消息格式,您可以做的就是丢弃消息的其余部分,只在收到新消息后再开始解析。如何做到这一点等,实际上取决于协议本身。
我一直在研究如何改变c#方法执行的行为,特别是当出现异常以支持: 重试/继续:能够再次尝试同一语句并在成功后继续跳过/继续:移动到下一个语句并继续执行 我读过很多回复,说这是糟糕的编码实践,但这是针对代码转换器的,它从支持此功能的语言转换数百万行代码。我需要在功能上保持一致。
问题内容: 因此,我的教授为我们分配了一个项目,我们必须从文本文件中接收命令并使用它们来驱动程序的流程。这些命令-起飞,着陆,装载货物,卸载货物等-用于模拟飞机状物体。 有时执行这些命令没有意义,例如在飞机飞行中装载货物。因此,为防止发生此类情况,我们必须在自己的异常类中进行编码,即 “如果命令飞机在飞行中装载货物,则抛出InvalidActionException” 我的问题是:引发异常后,如何
我有这个密码- 编译器将如何实现这一点。在生成的汇编代码中,对异常的检查实际放在哪里? 更新 我知道上面的代码是如何翻译成字节码的。字节码仅将try-catch转换为相应的try-handler块。我感兴趣的是JVM将如何将其转换为汇编/与或处理。
我有以下情况,我试图看看是否有解决方案: 两个Spring服务调用必须并行进行(一个是现有的服务调用/逻辑,另一个是新添加的服务调用) 然而,一条快乐的道路应该是直截了当的,当涉及到服务发出的错误时,应该遵守以下规则: > 如果其中只有一个失败,则通过另一个服务(异步)记录错误,并且API只返回成功服务的结果--这可以通过相应的线程来完成。 我的问题是,因为这些服务返回某个对象的列表,即使我使用并
问题内容: 一旦在此代码中捕获到异常,该方法就会运行,但是一旦我输入一个数字,程序就会关闭,并显示“生成成功”消息。一旦发生异常,是否有任何方法可以返回while循环? 问题答案: 将 try / catch 放入 while循环中 :
问题内容: 我的示例代码如下: 我的要求是,在捕获到异常之后,我要处理数组的其余元素。我怎样才能做到这一点? 问题答案: 您的代码应如下所示: