我有一个网络客户端,它在循环中尝试3次连接到服务器。在此期间我使用睡眠线程。有没有办法用一些代码替换Thread.sleep(700);
,这些代码在客户端连接后立即跳过等待期。
NClient pc;
if (pc == null)
{
try
{
Thread.sleep(700);
}
catch (InterruptedException x)
{
//TODO
}
if (pc != null)
{
outPrint.println("Connected");
break;
}
}
我希望通过减少连接协商正在进行的等待时间来改善用户体验。 Java中有哪些选项可以做到这一点?
答案 0 :(得分:1)
这个问题的答案取决于NClient
的实施。通常情况下,我会使用connect timeout
。以下示例说明了如何使用Socket
执行此操作。我不知道NClient
是什么,所以不幸的是我不能给你一个NClient
的例子。
创建一种尝试连接的方法 - 最多3次
Socket connectToServer() {
Socket socket = new Socket();
final int connectTimeoutMs = 700;
for (int i=0; i<3; i++) {
try {
// the call to connect blocks the current thread for a maximum of 700ms if it can't connect
socket.connect(new InetSocketAddress("localhost", 8080), connectTimeoutMs);
} catch (IOException e) {
// failed to successfully connect within 700 milliseconds
e.printStackTrace();
}
}
return socket;
}
使用以上内容
Socket socket = connectToServer();
if (socket.isConnected()) {
// do stuff with the valid socket!
}
简而言之,请使用connect timeout
!