HTTP長連接(long connection)與短連接(short connection)本質上是TCP長連接和短連接:短連接是指在一次HTTP請求和響應之后立即關閉本次TCP連接,下次請求響應重建一個新的TCP連接;而長連接是指請求響應之后並不立即關閉本次TCP連接,下次請求響應繼續重用該TCP連接。HTTP/1.0默認短連接,HTTP/1.1起默認長連接,長連接通過請求頭Connection: keep-alive啟用長連接、通過Keep-Alive: timeout=20設置長連接的超時時間(秒)。
相同點 | 不同點 | |
HTTP長連接 | 都是基於TCP連接,並無本質不同;由HTTP請求頭Connection: keep-alive控制是否長/短連接。 |
1、使用次數:重用多次; 2、關閉時機:超時后才關閉該TCP連接,由Keep-Alive: timeout=20控制超時時間(秒)。 |
HTTP短連接 | 1、使用次數:僅使用一次; 2、關閉時機:一次HTTP請求響應后立即關閉該TCP連接。 |
而HTTP長輪詢(long polling)是指服務端收到請求后若有數據立即返回,若無數據則保持到有數據或一段時間后超時,瀏覽器收到響應后立即重新發送相同的請求;HTTP短輪詢(short polling)是指服務端收到請求后無論是否有數據都立即返回,瀏覽器收到響應后間隔一段時間后重新發送相同的請求。輪詢建立在連接基礎上,輪詢是長是短與連接是長是短無關。
相同點 | 不同點 | |
HTTP長輪詢 | 都是基於HTTP連接,都將重復發送相同請求。 |
1、請求發送頻率:瀏覽器端收到HTTP響應后立即重復發起相同HTTP請求; 2、服務器端處理機制:有數據時立即響應,無數據時等待數據或直到超時; 3、特點:獲取數據比較實時,服務器端需要較多資源以維持眾多長輪詢。 |
HTTP短輪詢 | 1、請求發送頻率:瀏覽器端收到HTTP響應后間隔一段自定義時間后重復發起相同HTTP請求; 2、服務器端處理機制:無論是否有數據都立即響應; 3、特點:獲取數據不實時,通過瀏覽器端腳本即可實現。 |
HTTP長輪詢主要用於實現需要實時獲取數據的地方,例如:即時消息、實時股票價格等,其主要技術要點在於服務端無數據時如何保持到有數據或超時。另外在請求發生頻率上,長輪詢也可以在入短連接一樣收到響應后間隔一段時間后才發送,只是會不夠實時;短輪詢也可以如長連接一樣在收到響應后立即發送,只是會給服務器端造成過大壓力。
總而言之,實現長輪詢需在服務器端異步的基礎上,使用如下等方式檢測是否有新數據:
(1)死循環檢測,需設置死循環自動退出條件,並且需要配合線程休眠;
(2)計時器定時檢測,需設置計時器自動停止條件;
(3)發布訂閱方式,增刪改數據之處發布消息,檢測新數據之處訂閱該消息;
(4)鎖方式,若無新數據獲取鎖失敗,有新數據時獲取鎖成功;
(5)其它能實現線程阻塞的方式。