什麼是系統設計中的長輪詢?

Mondo 科技 更新 2024-01-30

在開發處理實時資料的 Web 應用程式時,重要的是要考慮如何有效地將資料交付給客戶端。 一種選擇是長輪詢。

優質作者列表 讓我們首先看看什麼是輪詢,以及它如何擴充套件到長輪詢。 輪詢是一種允許伺服器向客戶端傳送資訊的技術。 另一方面,長輪詢是傳統輪詢的一種變體,它使伺服器能夠在資料可用時將資料傳送到客戶端。 客戶端向伺服器傳送資訊請求,但伺服器可能不會立即響應。 相反,它會等到資料可用,然後向客戶端傳送完整的響應。 長輪詢是向客戶端傳送資訊的有效方法,因為它減少了傳輸相同數量資料所需的 HTTP 請求數。 但是,對於伺服器來說,在客戶端發出新請求之前管理未滿足的客戶端請求並處理可用的新資訊可能是乙個挑戰。

長輪詢的優點之一是它是 HTTP 協議的一部分,這使得它被廣泛接受,並且比短輪詢產生的頻寬更少。 總體而言,長時間輪詢是讓客戶實時了解新資訊的可靠方法。 下面是使用 HTTP 長輪詢的應用程式的基本流程:

客戶端傳送 HTTP 請求並等待伺服器的響應。

當更新可用時,伺服器會向客戶端提供完整的響應。

然後,客戶端會立即或在暫停後傳送新的長輪詢請求,以允許適當的延遲。

為每個長輪詢請求設定超時。 如果連線因超時而丟失,客戶端必須定期重新建立連線。

長輪詢是傳統輪詢的更有效版本,因為它減少了需要向伺服器發出的請求數。 在傳統輪詢中,每個請求都需要建立新的連線,解析HTTP頭,發出新的資料查詢,並生成和傳遞響應。 然後,連線將終止並清理資源。

長輪詢允許伺服器盡可能長時間地保持客戶端連線開啟狀態,僅在資料可用或達到超時閾值時才響應。 這樣就避免了在新資料可用之前為每個客戶端重複該過程的需要,這有助於節省資源。

在長時間輪詢中,大部分工作都是在伺服器端完成的。 在客戶端,只需要管理對伺服器的乙個請求。 當客戶端收到響應時,它可以發出新請求並根據需要重複該過程。 從客戶端的角度來看,基本輪詢和長輪詢之間的主要區別在於,執行基本輪詢的客戶端可能會故意在每個請求之間留出一小段時間視窗,以減少伺服器負載。 它還可能以不同於不支援長輪詢的伺服器的方式處理超時。

例如,對於長輪詢,可以將客戶端配置為在等待響應時允許更長的超時。 這樣做是為了避免與伺服器的通訊問題,這些問題可能由超時期限標識。

除了這些注意事項之外,基本輪詢已經涵蓋了客戶端需要執行的其他操作。 另一方面,伺服器必須管理多個未解析連線的狀態。 使用多個伺服器和負載平衡器時,可能需要建立乙個解決方案來保留會話狀態。 伺服器還必須正常處理連線超時,這在長輪詢中比在專用協議中更常見。

使用 HTTP 長輪詢在應用程式中構建實時互動性需要考慮多種因素,包括開發和擴充套件方面。 需要考慮的一些問題包括:

隨著使用量的增長,您將如何管理實時後端?

當移動裝置在網路之間切換或失去連線時,或者當 IP 位址發生更改時,長輪詢是否會自動重新建立連線?

您能否通過長時間輪詢來管理訊息佇列並彌補丟失的訊息?

長輪詢是否提供跨多個伺服器的負載平衡和故障轉移支援?

請記住,長輪詢只是底層請求-響應機制的臨時版本,這增加了其實現的複雜性。 因此,在應用程式中使用長輪詢時,這些是要考慮的重要因素。

在構建具有 HTTP 長輪詢伺服器推送的實時應用程式時,必須開發通訊管理系統。 這意味著您將負責更新、維護和擴充套件後端基礎結構。

長時間輪詢可能會給可靠的訊息排序帶來挑戰。 這是因為同一客戶端可以同時發出多個 HTTP 請求。 例如,如果客戶端開啟兩個瀏覽器選項卡並使用相同的伺服器資源,或者如果客戶端實現同時使用多個連線,則可能無法保證只寫入一次重複資料。

另乙個問題是伺服器可能會傳送響應,但網路或瀏覽器問題可能會阻止成功接收訊息。 如果未實現訊息接收確認過程,則對伺服器的後續呼叫可能會導致訊息丟失。

使用長輪詢的一大挑戰是,由於其複雜性,它可能難以擴充套件。 維護給定客戶端的會話狀態需要在負載平衡器後面的所有伺服器之間共享該會話狀態,或者將同一會話中的後續客戶端請求路由到處理原始請求的同一伺服器。 這可能會導致負載分布不均,並可能導致群集中各個伺服器過載。

HTTP 長輪詢是伺服器獨立向客戶端傳送資料的一種方式,允許伺服器在可用時實時推送資料到客戶端。 但是,當來自伺服器的訊息很少且不太頻繁時,它最有效。

相關問題答案

    系統設計中的 WebSocket

    傳統的 Web 模型是圍繞 HTTP 請求和響應正規化構建的。在 HTTP 連線中,客戶端向伺服器傳送請求,伺服器使用請求的資料進行響應。這發生在每個請求和響應的單獨連線中,這意味著 HTTP 不太適合需要連續雙向通訊的實時應用程式。為了用 HTTP 解決這個問題,我們使用 WebSockets。W...

    系統設計中的延遲

    想象一下有水流過的管道。水流過管道的速度可能會有所不同,即有時它流得很快,有時它流得很慢。此概念類似於系統設計中的延遲。延遲決定了資料從系統一端傳輸到另一端的速度。延遲是衡量客戶端和伺服器之間資料傳輸速度的指標。它與系統的效能直接相關 更低的延遲意味著更好的效能。每當發出請求時,瀏覽器 客戶端 都會...

    主題館的設計應該考慮什麼?

    主題館的設計是向觀眾詮釋主題的主會場,為滿足文化 科學 娛樂等遊客多樣化的需求和選擇,是具有創意活動的現代化觀賞場所。主題館的設計以主題概念為主體,以展覽空間為載體,將主題思維融入展廳概念設計中。文化中心是集收藏 保護 研究 展示 教育為一體的綜合性展廳。主題文化中心作為文化宣傳單位,為我國地方文化...

    如何在系統設計中選擇合適的資料庫?

    資料庫是世界上最複雜的技術系統的關鍵元件,它們的使用方式對其效能 可擴充套件性和一致性有重大影響。在本文中,我們概述了在系統設計面試中需要了解的最關鍵的資料庫主題。資料庫負責在最基本的級別儲存和檢索應用程式的資料。由於資料庫是處理對物理資料儲存的訪問的程式,因此它有時稱為資料庫管理系統 DBMS 資...

    什麼是分布式系統中的領導者選舉?

    領導者選舉的目標是為分布式系統中的特定實體 如程序 主機 執行緒 物件或人員 授予特殊權力。這些權力可能包括委派任務的能力 修改資料的能力或處理所有系統請求的責任。領導者選舉可以成為提高效率 最小化協調 簡化架構和減少開銷的有用工具,但它也可能引入額外的故障模式和擴充套件挑戰,並使評估系統的有效性變...