HTTP長連接與短連接、長輪詢與短輪詢及長輪詢的實現概述


        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、特點:獲取數據不實時,通過瀏覽器端腳本即可實現。


image.png

        HTTP長輪詢主要用於實現需要實時獲取數據的地方,例如:即時消息、實時股票價格等,其主要技術要點在於服務端無數據時如何保持到有數據或超時。另外在請求發生頻率上,長輪詢也可以在入短連接一樣收到響應后間隔一段時間后才發送,只是會不夠實時;短輪詢也可以如長連接一樣在收到響應后立即發送,只是會給服務器端造成過大壓力。

        總而言之,實現長輪詢需在服務器端異步的基礎上,使用如下等方式檢測是否有新數據:

(1)死循環檢測,需設置死循環自動退出條件,並且需要配合線程休眠;

(2)計時器定時檢測,需設置計時器自動停止條件;

(3)發布訂閱方式,增刪改數據之處發布消息,檢測新數據之處訂閱該消息;

(4)鎖方式,若無新數據獲取鎖失敗,有新數據時獲取鎖成功;

(5)其它能實現線程阻塞的方式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM