gpt4 book ai didi

java - 如何让我的 netty 处理程序在捕获异常后继续读取数据?

转载 作者:行者123 更新时间:2023-12-02 11:53:09 28 4
gpt4 key购买 nike

在我的 netty 处理程序中,我重写了 exceptionCaught 方法来捕获由 netty ObjectDecoder 抛出的 TooLongFrameException。如果出现该异常,我会向服务器发送一条消息,其中包含有关该错误的信息。服务器接收该消息,然后尝试继续发送更多数据。问题是,我的处理程序似乎没有继续读取该数据。

我使用netty 4.1.18.Final

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抛出的异常后,如何让我的Handler继续读取数据?

最佳答案

问题实际上是,一旦处于这种状态,ObjectDecoder 将出现困惑的“解码状态”,因此除了断开连接之外您无能为力。如果您要使用其他消息格式,您可以做的就是丢弃消息的其余部分,并且只有在收到新消息后才重新开始解析。如何做到这一点实际上取决于协议(protocol)本身。

关于java - 如何让我的 netty 处理程序在捕获异常后继续读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47751523/

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