Netty中的连接超时问题

初学Netty框架,入门时总会犯些低级错误,我把这些都记录下来,可以加深理解。

今天遇到的问题是ChannelFuture连接超时后会报异常从而导致客户端崩溃。

我是这么写的

ChannelFuture future = bootstrap.connect(host, port).sync();
sync()是同步调用,具体机制我还没大搞明白。

解决办法;

bootstrap.option(ChannelOption.CONNECT_TIMEOUT_MILLIS,1000);
添加了一个超时设置,然后将sync()改为awaitUninterruptibly()

之后就可以判断future的状态从而执行相应的逻辑,而不会报异常。


socketChannel.pipeline().addLast("idleStateHandler",new IdleStateHandler(2000,2000,2000,TimeUnit.MILLISECONDS));
这是channel的读写超时,与ChannelFuture超时无关

@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt)
    throws Exception{
    System.out.println("触发事件");
    if (evt instanceof IdleStateEvent) {
        IdleStateEvent e = (IdleStateEvent) evt;
        if (e.state() == IdleState.READER_IDLE) {
            ctx.close();
            System.out.println("READER_IDLE 读超时");
        } else if (e.state() == IdleState.WRITER_IDLE) {
            ByteBuf buff = ctx.alloc().buffer();
            buff.writeBytes("mayi test".getBytes());
            ctx.writeAndFlush(buff);
            System.out.println("WRITER_IDLE 写超时");
        }
        else {
            System.out.println("其他超时");
        }
    }
}

你可能感兴趣的:(Netty中的连接超时问题)