2014-02-07 74 views
0

從iPad上,我使用NSURLRequest來輪詢我WLAN上的http服務器上的文件。我每秒鐘閱讀一次該文件。我使用下面的代碼來讀取文件。同步NSURLConnection和端口使用?

NSURLRequest *request = [NSURLRequest requestWithURL:myURL 
            cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData 
            timeoutInterval:30.0]; 

// Get the data 
NSURLResponse *response; 
NSError *dataError; 
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&dataError ]; 

在服務器上運行netstat顯示的是以下網絡活動(其中10.0.1.11是iPad的IP地址,這是輪詢服務器:

Proto Local Address   Foreign Address  State 
    TCP 10.0.1.16:80   10.0.1.11:56999  TIME_WAIT 
    TCP 10.0.1.16:80   10.0.1.11:57010  TIME_WAIT 
    TCP 10.0.1.16:80   10.0.1.11:57011  TIME_WAIT 
    TCP 10.0.1.16:80   10.0.1.11:57012  TIME_WAIT 
    TCP 10.0.1.16:80   10.0.1.11:57013  TIME_WAIT 
    TCP 10.0.1.16:80   10.0.1.11:57014  TIME_WAIT 
    TCP 10.0.1.16:80   10.0.1.11:57015  TIME_WAIT 
    TCP 10.0.1.16:80   10.0.1.11:57016  TIME_WAIT 
    TCP 10.0.1.16:80   10.0.1.11:57017  TIME_WAIT 
    TCP 10.0.1.16:80   10.0.1.11:57018  TIME_WAIT 
    TCP 10.0.1.16:80   10.0.1.11:57019  TIME_WAIT 
    TCP 10.0.1.16:80   10.0.1.11:57020  TIME_WAIT 
    TCP 10.0.1.16:80   10.0.1.11:57021  TIME_WAIT 
    TCP 10.0.1.16:80   10.0.1.11:57022  ESTABLISHED 

我應該關注的是,有多個端口在iPad端使用?我應該在關閉後「關閉」NSURLConnection嗎?我正在使用ARC。

回答

1

當您關閉一個端口時,它會進入TIME_WAIT一段時間,以確保從另一端不會出現更多流量。根據實施情況,它可以在幾秒到幾分鐘內處於該狀態。

它最終會解決問題,但是這會給服務器和客戶端帶來很大的開銷。如果很多客戶端這樣做,您不應該每隔一秒輪詢一次具有新連接的服務器。您應該打開一個連接並在服務器上收聽來自服務器的新消息(通常稱爲「長時間輪詢」)。或者您可以重新使用HTTP/1.1的連接。無論如何,如果您深入到網絡中,您幾乎總是會想從NSURLConnection切換到AFNetworking,這對管理這些類型的連接有更好的支持。

+0

我在網絡上無法說出來......當你將長輪詢描述爲從服務器聽新消息時,你是否確實是在傾聽響應?我認爲消息是從客戶端發起的,並等待來自服務器的單個響應?在長時間投票時會做更多的閱讀。無論如何,我得到的結論是1Hz輪詢不止有一個原因,特別是iPad /客戶端因保持WiFi活躍而導致的功耗? –

+0

值得一提的是,降低輪詢頻率似乎可以更好地重複使用iPad的出站端口。感謝指針。 –

+0

我正在討論的「長期民意測驗」技術涵蓋如下:https://en.wikipedia.org/wiki/Push_technology#Long_polling您連接到服務器並要求「下一次更新」。在實際上有更新之前,它不會回答您。 –

0

實際上NSURLConnection將在請求結束後關閉 您是否正在將這些請求發送到另一個線程?

如果是的話,我相信你在netstat中看到的是到服務器的開放連接。似乎每個請求都需要更長的時間,因此第二個和第三個和第四個連接正在建立(依此類推)。