2 回答

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊
我相信您將 TCP 保持連接與 HTTP 保持連接(持久連接)混淆了。這些是不相關(guān)的概念。從您的問題來看,您的意思可能是 HTTP 持久連接。
在 HTTP/1.1 中,持久連接是默認(rèn)設(shè)置NSURLSession
,幾乎每個(gè) HTTP/1.1 客戶端都使用它。你必須要求關(guān)閉它們。您可以檢查一個(gè)Connection: close
在HTTP標(biāo)頭,或者在服務(wù)器端,您可以檢查Close
的領(lǐng)域http.Request
。但我相信你會得到持久的連接。這意味著您不必為每個(gè)請求重新協(xié)商 TLS 隧道(或至少是 TCP 三向握手)。(盡管如果您發(fā)出并行請求,仍然需要協(xié)商多個(gè)連接。HTTP/1.1 一次只能處理一件事,并且NSURLSession
會嘗試使用連接池來提高響應(yīng)時(shí)間。)
TCP keep-alives 是完全不同的事情。它會定期向另一端發(fā)送“ping”以確保它仍然可以訪問。有很多方法可以讓您失去網(wǎng)絡(luò)連接,并且直到您下次嘗試通信時(shí)才知道,通常的癥狀是連接掛起,您需要超時(shí)。理論上,TCP keep-alive 只是發(fā)現(xiàn)這一點(diǎn)的工具,但我?guī)缀鯊奈窗l(fā)現(xiàn)它實(shí)用。很難正確配置(尤其是在 Cocoa 中)。您幾乎總是需要為您的應(yīng)用程序構(gòu)建更高級別的“ping”功能,而不是依賴于此。
但是把它解決你的問題,HTTP/1.1 可能對你來說很好,但是你需要仔細(xì)管理你的響應(yīng)。如果你對每封信都提出一個(gè)新的請求并發(fā)回大量的回復(fù),那么這會很糟糕。您將讓所有連接池忙于下載您要扔掉的東西。你需要首先關(guān)注好的算法。至少,您可能只想一次發(fā)送幾個(gè)結(jié)果,并在您的 API 中提供“分頁”方法,以便為同一搜索請求更多結(jié)果。
- 2 回答
- 0 關(guān)注
- 230 瀏覽
添加回答
舉報(bào)