2010-06-10 62 views
1

我試圖連接到一個我知道存在的URL,但我不知道何時。 我無權訪問此服務器,因此無法更改任何內容以接收活動。循環內的HttpURLConnection

實際的代碼是這樣的。

URL url = new URL(urlName); 
for(int j = 0 ; j< POOLING && disconnected; j++){ 
    HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
    int status = connection.getResponseCode(); 
    if(status == HttpURLConnection.HTTP_OK || status == HttpURLConnection.HTTP_NOT_MODIFIED){ 
     //Some work 
    }else{ 
     //wait 3s 
     Thread.sleep(3000);  
    } 
} 

Java不是我最好的技能,我不確定從性能的角度來看這個代碼是否好。 我每3秒開一個新連接?或者連接重用?

如果我調用disconnect()我確保沒有新的連接在循環中打開,但是......它會影響性能?

對此提出建議?知道URL存在的最快/最好的方法是什麼?

回答

0

從性能的角度來看,這段代碼是可以的,它每次都會創建一個新的連接。無論如何,如果你有一個Thread.sleep(3000)在你的循環中,你不應該擔心性能;)

如果你擔心服務器端的連接使用情況,你可以看看Apache HTTP client,它有很多特徵。我認爲它默認處理保持活動的連接。

+0

我認爲他從使用系統資源的角度談論性能。使用網絡是特定於操作系統的,並且可能存在各種奇怪的限制(例如,我曾經有一個Windows問題不允許我在時間t內打開超過n個套接字連接)。 – 2010-06-10 16:29:55

+0

問題在於其他服務器的資源。他們說我們打開了比預期更多的連接。我不確定這是否是由循環內的openConnection()引起的代碼點。 – 2010-06-10 17:20:57

+0

@Carlos Garces您可以嘗試使用'disconnect'來查看他們是否再次抱怨:)或者您可能會要求他們更清楚地闡述限制。 – 2010-06-10 17:33:10

0

1)使用斷開連接,你不想要許多打開的連接,你不使用。放棄不使用的資源是任何語言的基本練習。
2)我不知道如果每3秒打開和關閉新的網絡連接會污染系統資源,檢查它的唯一方法就是試試。
3)您可能想要觀察'ConnectException',如果通過「URL [不存在]」表示服務器關閉。

+0

「URL [不存在]」表示URL返回404,但是是暫時的。它將存在,URL由其他進程按需創建。 – 2010-06-10 17:23:27