java nio 连接超时_如何设置Java NIO AsynchronousSocketChannel连接超时

答案是:你做不到.

首先要了解的是TCP连接的工作原理.内核正在发送SYN数据包,在每次重试之间退出时间.这可以通过内核参数进行调整.可以在here找到一篇详细介绍(针对linux)的文章

为了让您了解为套接字连接实现更短的超时所涉及的是将套接字置于非阻塞模式,将其置于带超时的select()中,然后使用getsockopt()查看发生的情况. This StackOverflow answer显示了这是如何工作的.

使用NIO.2,可以使用您无权访问的线程为您处理连接过程.不幸的是,没有办法告诉你你想要更短的连接超时;当连接成功失败(包括超时)时,它只调用你的完成处理程序/通知Future.

您可以选择在返回的Future上调用get(timeout,unit),然后取消Futureif它超时…但这意味着如果您希望连接是异步的,则必须添加另一层线程/回调并且也可以用nio实现你自己的异步.

因为你正在寻找异步网络的东西,最后一件值得一提的是Netty确实给你这个(使用Nio):

Bootstrap bootstrap = new Bootstrap()

.group(new NioEventLoopGroup())

.channel(NioSocketChannel.class)

.remoteAddress(new InetSocketAddress(remoteAddress, port))

.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, connectionTimeout);

ChannelFuture f = bootstrap.connect();

您可以使用该ChannelFuture注册一个监听器进行回调.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值