基本上我有以下解码器:
public class Decoder extends ReplayingDecoder<Packet, Void> {
@Override
public Packet decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception {
short id = in.readUnsignedByte();
Packet packet = Packet.newInstance(id);
if (packet == null) {
throw new IOException("Wasn't prepared to deal with packet 0x" + Integer.toHexString(id));
}
packet.read(in);
return packet;
}
}
它旨在从流中获取输入,读取无符号字节数据包 id,然后使用该字节构造解码器,但是我在这里遇到的问题是在输入无效时关闭系统(抛出 IOException)。我曾尝试使用 ChannelHandlerContext.close() 和 ChannelHandlerContext.channel().close() 但这两个最终都在循环中调用解码器并且我被卡住了。
请给我一些帮助以优雅地关闭此连接。
附带说明一下,当读取阻塞超过 x 毫秒时,知道如何终止连接也很好。