2014-06-15 183 views
0

我有一個網絡客戶端,它在一個循環中嘗試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中有哪些選項可以做到這一點?

+2

爲什麼?無論如何,connect()方法都會阻塞。你不需要再睡覺。 – EJP

回答

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