輪詢,長連線,長輪詢原理及實現方式,優缺點

2021-09-13 03:32:16 字數 1798 閱讀 2887

在前一篇文章中我們了解了websocket,就很有必要了解一點web通訊技術。常用的輪詢,長連線原理及實現方法。

輪詢

輪詢的原理就是客戶端以一定的時間間隔向服務端發出請求,頻繁的請求保持客戶端和服務端同步,這個技術最大的問題就是客戶端發出請求和伺服器端的更新並不是一致的。客戶端以固定的頻率想伺服器發出請求,可能伺服器端並沒有更新,返回的是個空的資訊,等伺服器端更新的時候,有可能客戶端並沒有請求,而且只有最後一次請求才能獲得最新資料,這樣多次請求不僅浪費了資源,而且並不是實際上的實時更新。

推送,長連線

推送也叫做長連線。也就是客戶端並不是隔一段時間請求一次,而是發起一次請求後就掛起,一直到服務端有更新的時候,伺服器才會主動推送資訊到客戶端。如果沒有更新資訊,那就一直保持連線的狀態,客戶端不做多餘的請求,伺服器端也不做響應。 長輪詢是對定時輪詢的一種改進,目的是為了降低無效的網路傳輸。當伺服器端沒有資料更新的時候,連線會保持一段時間週期直到資料改變或時間過期。通過這種機制來減少無效的客戶端和伺服器之間的互動。

流技術

輪詢:

我打算每隔5秒鐘打一次**,如果伺服器端有了訊息,就傳送給我。如果沒有,我就掛掉,伺服器就不做聲。但是如果伺服器在第6秒有新訊息了,我只能在下乙個5秒才能獲取到這個資訊。有一定的延遲。 長連線:我一直打**,並且不結束通話,主要伺服器有新訊息了,就傳遞給我,如果沒有,那就不做聲。這種操作比較浪費資源,而且當如果有多個人找伺服器,呈現在網路上,就是比較卡或速度慢。 長輪詢:我一直打**,並且設定了連線時間為20秒,如果20秒鐘伺服器有訊息了,就傳遞給我,如果沒有,那我就掛掉,再繼續。這種方式也是一種資源的浪費。

各自的優缺點:

輪詢

實現方式是使用定時器和ajax請求,以特定的時間間隔向伺服器傳送請求。

優點:後端開發人員編寫比較容易;

缺點:不間斷請求,請求中很大部分是無用的,浪費頻寬;

應用:小型簡單應用。

使用方法:

長連線:

使用ajax請求,傳送ajax請求後,伺服器會遇到阻塞,直到有訊息傳遞才返回資訊。

優點:無訊息的時候不會頻繁請求;

缺點:要處理高併發問題且消耗資源

應用:網頁版qq,網頁版應用等

使用方法:

function ajax();

xhr.send();

}

長連線

在頁面裡嵌入乙個隱蔵iframe,將這個隱蔵iframe的src屬性設為對乙個長連線的請求,伺服器端就能源源不斷地往客戶端輸入資料。 優點:訊息及時到達,不發無用請求

缺點:浪費服務端資源

以上這些方案並不是真正意義上的實時資訊傳遞。只是用ajax來模擬實時的效果。在每次客戶端和伺服器端互動的時候都一次http請求和應答的過程,每次請求和應答都有完整的http頭資訊,這就增加了每次傳輸的資料量。實際運用中,為了達到實時傳輸的效果,開發人員旺旺要構造兩個http連線倆模擬客戶端和伺服器之間的雙向通訊,乙個連線用來處理客戶端到服務端的資料傳輸,乙個用來處理伺服器到客戶端的資料傳輸。這不可避免的增加了程式設計的難度。也增加了伺服器端的負載。因此使用websocket就可以實現實時資訊通訊

輪詢,長輪詢,websocket原理

讓瀏覽器定時朝後端傳送請求 通過ajax向後端偷偷傳送資料 比如每隔五秒鐘發一次請求,那麼你的資料延遲就可能會高達五秒 不足之處 資料延遲 消耗資源過大 請求次數太多 佇列 ajax 服務端給每個客戶端建立佇列,讓瀏覽器通過ajax朝服務端要資料,去各自的佇列中獲取 如果沒有資料則會阻塞但是不會一直...

輪詢 長輪詢

輪詢 通過setinterval向後台請求資料,更新html from flask import flask,render template,request,jsonify users 2 3 user list defuser list import time return render temp...

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

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