Netty 4.0 - 关闭无效输入的通道

时间:2012-08-18 10:48:24

标签: java netty nio

基本上我有以下解码器:

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()但是这两个都最终在一个循环中调用了Decoder,然后我就陷入了困境。

请优雅地关闭此连接,给我一些帮助。

另外,如果读取已被阻止超过x毫秒,那么知道如何终止连接也是一件好事。

1 个答案:

答案 0 :(得分:1)

要关闭非活动连接,您可以向管道添加ReadTimeoutHandler。在指定时间段内未收到任何数据时,超时处理程序将抛出ReadTimeoutException。您可以在exceptionCaught()方法中处理此异常,方法与处理无效输入上的IOException相同。