長輪詢和短輪詢的區別

2021-08-17 16:03:13 字數 1349 閱讀 7282

http 協議是請求/響應正規化的, 每乙個 http 響應都是由乙個對應的 http 請求產生的; http 協議是無狀態的,多個 http 請求之間是沒有關係的.

目前 http 協議普遍使用的是 1.1 版本, 之前有個 1.0 版本,兩者之間的乙個區別是 1.1 支援 http 長連線, 或者叫持久連線.1.0 不支援 http 長連線, 每次乙個 http請求響應後都關閉 tcp 連線, 下個 http 請求會重新建立 tcp 連線.

所謂 http 長連線, 就是多個 http 請求共用乙個 tcp 連線; 這樣可以減少多次臨近 http 請求導致 tcp建立關閉所產生的時間消耗. http 1.1 中在請求頭和相應頭中用 connection欄位標識是否是 http長連線, connection: keep-alive, 表明是 http 長連線; connection:closed, 表明伺服器關閉 tcp 連線

與 connection 對應的乙個欄位是 keep-live, http 響應頭中出現, 他的格式是 timeout=30,max=5, timeout 是兩次 http 請求保持的時間(s), , max 是這個 tcp 連線最多為幾個 http請求重用

http 長輪詢是伺服器收到請求後如果有資料, 立刻響應請求; 如果沒有資料就會 hold 一段時間,這段時間內如果有資料立刻響應請求; 如果時間到了還沒有資料, 則響應 http 請求;瀏覽器受到 http 響應後立在傳送乙個同樣http 請求查詢是否有資料;

http 長輪詢的侷限:

瀏覽器端對統一伺服器同時 http 連線有最大限制, 最好同一使用者只存在乙個長輪詢;

伺服器端沒有資料 hold 住連線時會造成浪費, 容易產生伺服器瓶頸;

http端輪詢是伺服器收到請求不管是否有資料都直接響應 http 請求; 瀏覽器受到 http 響應隔一段時間在傳送同樣的http 請求查詢是否有資料;

http 短輪詢的侷限是實時性低;

兩者相同點:

可以看出 http 長輪詢和 http 短輪詢的都會 hold 一段時間;

兩者不同點

間隔發生在服務端還是瀏覽器端: http 長輪詢在服務端會 hold 一段時間, http 短輪詢在瀏覽器端 「hold」一段時間;

關於 http 長連線乙個誤解就是伺服器主動推送資料, 這個在 http 協議下是無法實現的, 因為 http請求/響應正規化決定的, http 中伺服器返回資料必須要有乙個瀏覽器端的請求對應,伺服器無法主動推送給瀏覽器資料.

不管 http 長輪詢還是 http 短輪詢 保證同乙個使用者在多 tab 下只存在乙個定時查詢是有好處的,這可以通過在瀏覽器端快取資料解決, 在 http 響應後在瀏覽器端快取資料, 並設定乙個有效期,然後在每次傳送 http 請求時檢查是否有有效資料, 沒有則傳送請求獲取

長輪詢 短輪詢

長輪詢 客戶端向伺服器傳送ajax請求,伺服器接收到請求後hold住連線,直到有新訊息才返回響應資訊並關閉連線,客戶端處理完響應資訊後再向伺服器傳送新的請求。優點 在無訊息的情況下不會頻繁請求,消耗資源小。缺點 伺服器hold住連線會消耗資源,返回的資料順序無保證,難以管理維護。function a...

長連線 短鏈結 長輪詢 短輪詢

原文 那就是一直認為,http連線分為長連線和短連線,而我們現在常用的都是http1.1,因此我們用的都是長連線。這句話其實只對了一半,我們現如今的http協議,大部分都是1.1的,因此我們平時用的基本上都是長連線。但是前半句是不對的,http協議根本沒有長短連線這一說,也正因為誤解了這個,導致對於...

Http 長連線 短連線 長輪詢 短輪詢

短連線 每次http請求都會建立tcp連線,管理容易 長連線 只需要建立一次tcp連線,以後http請求重複使用同乙個tcp連線,管理難 http1.1規定了預設保持長連線 http persistent connection 也有翻譯為持久連線 資料傳輸完成了保持tcp連線不斷開 不發rst包 不...