我有一个使用Netty的项目,但存在一些问题:

如果connection闲置了一段时间,connection是否会自行关闭?如果它本身关闭,如何设置关闭时间?

有5个线程,它们发送100个数据。他们使用相同的渠道,例如

 /** release connect*/
    public void closeConnect(ChannelFuture writeFuture){
    if(writeFuture != null){
        writeFuture.awaitUninterruptibly();
    }
    future.getChannel().close();
    future.getChannel().getCloseFuture().awaitUninterruptibly();
    client.releaseExternalResources();
    }

    //write data
    ChannelFuture future = Channels.write(data);
    closeConnect(future);


上面的代码将导致closeChannelexception。我的问题是:如何避免例外?

另外,当我在客户端上使用ReadTimeoutHandler并设置timeout = 5s,并使线程休眠6s时,就会出现ReadTimeoutException。当我调用e.getChannel().close()时,它还会创建一个closeChannelException。我如何自己处理异常或无异常地关闭连接?

最佳答案

如果API抛出了ReadTimeoutException,则可以捕获它,然后调用closeConnect(...)

不过在我看来,该渠道已经关闭;因此,要么忽略CloseChannelException要么处理它,以免影响程序状态。

关于java - 网络的紧密联系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12003773/

10-10 14:26