Joe*_*Lin 5 java sockets asynchronous nio connect
看看JDK 1.7 API.我似乎无法在AsynchonousSocketChannel上设置连接超时.无论如何我可以在这样的频道上设置连接超时吗?
谢谢.
答案是:你做不到.
首先要了解的是TCP连接的工作原理.内核正在发送SYN数据包,在每次重试之间退出时间.这可以通过内核参数进行调整.可以在此处找到详细介绍(针对linux)的文章
为了让您了解为套接字连接实现更短的超时所涉及的是将套接字置于非阻塞模式,将其置于select()超时状态,然后使用getsockopt()以查看发生的情况.此StackOverflow答案显示了它的工作原理.
使用NIO.2,可以使用您无权访问的线程为您处理连接过程.不幸的是,没有办法告诉你你想要更短的连接超时; 它只是调用你的完成处理程序/通知Future连接成功失败的时间(包括超时).
您可以选择调用get(timeout, unit)返回的Future,然后取消它Future是否超时...但这意味着如果您希望连接是异步的,您必须添加另一层线程/回调,并且可能只是实现您自己的与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();
Run Code Online (Sandbox Code Playgroud)
你可以注册一个监听器来ChannelFuture进行回调.
| 归档时间: |
|
| 查看次数: |
3055 次 |
| 最近记录: |