首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java.nio中指定连接超时

在java.nio中指定连接超时
EN

Stack Overflow用户
提问于 2010-04-02 05:53:02
回答 2查看 4.8K关注 0票数 7

使用非阻塞I/O,用于连接到远程地址的代码如下所示:

代码语言:javascript
复制
SocketChannel channel = SelectorProvider.provider().openSocketChannel();
channel.configureBlocking(false);
channel.connect(address);

然后,当某个选择器指定相应的键isConnectable()时,必须通过在通道上调用finishConnect()来完成连接过程。

在使用这个习惯用法时,有没有办法指定连接超时时间?

EN

回答 2

Stack Overflow用户

发布于 2010-04-02 06:28:26

这个问题很有趣。我不确定nio本身是否提供了解决方案。

根据我的经验,我运行了一个Callable来尝试连接,然后使用Future轮询响应,使用“interval”和“timeout”变量循环,并使用Thread.sleep()进行响应。

希望这能为你指明一个有用的方向。

另外,我建议您看看Apache Mina (您可以将Mina描述为一个nio框架)。它可以为您处理很多这类事情,例如在StreamIoHandler http://mina.apache.org/report/trunk/apidocs/org/apache/mina/handler/stream/StreamIoHandler.html

票数 0
EN

Stack Overflow用户

发布于 2013-02-28 10:55:11

这个问题没有真正的意义。超时是针对阻塞模式的。如果需要,可以将通道保留为阻塞模式,然后调用channel.socket().connect(address, timeout);。如果您想要非阻塞模式,请使用您当前的代码;然后创建一个选择器;为OP_CONNECT注册通道;当您获得它时,调用finishConnect(),,如果返回true,则取消OP_CONNECT的注册,然后继续您的其余代码。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2563934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档