1. 程式人生 > >HTTP中的連線和輪詢

HTTP中的連線和輪詢

短連線和長連線

短連線:

每次Http請求都會建立Tcp連線,管理容易

長連線:

只需要建立一次Tcp連線,以後Http請求重複使用同一個Tcp連線,管理難  


HTTP1.1規定了預設保持長連線(HTTP persistent connection),資料傳輸完成了保持TCP連線不斷開(不發RST包、不四次握手),等待在同域名下繼續用這個通道傳輸資料;相反的就是短連線 如果伺服器沒有告訴客戶端超時時間也沒關係,服務端可能主動發起四次握手斷開TCP連線,客戶端能夠知道該TCP連線已經無效;另外TCP還有心跳包來檢測當前連線是否還活著,方法很多,避免浪費資源。

  1.  

在長連線的應用場景下,client端一般不會主動關閉它們之間的連線,Client與server之間的連線如果一直不關閉的話,會存在一個問題,隨著客戶端連線越來越多,server早晚有扛不住的時候,這時候server端需要採取一些策略,如關閉一些長時間沒有讀寫事件發生的連線,這樣可以避免一些惡意連線導致server端服務受損;如果條件再允許就可以以客戶端機器為顆粒度,限制每個客戶端的最大長連線數,這樣可以完全避免某個蛋疼的客戶端連累後端服務。

長連線和短連線的產生在於client和server採取的關閉策略,具體的應用場景採用具體的策略,沒有十全十美的選擇,只有合適的選擇

應用場景區別: 
1. 一般長連線(追求實時性高的場景)用於少數client-end to server-end的頻繁的通訊,例如:資料庫的連線用長連線, 如果用短連線頻繁的通訊會造成socket錯誤,而且頻繁的socket 建立也是對資源的浪費。 
2. 而像WEB網站的http服務一般都用短連結(追求資源易回收場景),因為長連線對於服務端來說會耗費一定的資源,而像WEB網站這麼頻繁的成千上萬甚至上億客戶端的連線用短連線會更省一些資源。

 

短輪詢和長輪詢

和短連線和長連線有本質區別 
1. 短輪詢:重複傳送Http請求,查詢目標事件是否完成

優點:編寫簡單

缺點:浪費頻寬和伺服器資源 

2. 長輪詢:在服務端hold住Http請求(死迴圈或者sleep等等方式),等到目標時間發生,返回Http響應。

優點:在無訊息的情況下不會頻繁的請求

缺點:編寫複雜

PS:關注360linker公眾號,入官方社群取免費視訊教程、知名單位招聘資訊。交流分享IT圈學習經驗。