91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

長輪詢、WebSocket、服務器發送事件有什么區別

發布時間:2022-03-19 16:21:41 來源:億速云 閱讀:268 作者:iii 欄目:服務器

這篇文章主要介紹“長輪詢、WebSocket、服務器發送事件有什么區別”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“長輪詢、WebSocket、服務器發送事件有什么區別”文章能幫助大家解決問題。

長輪詢、WebSocket和服務器發送事件有什么區別

長輪詢,WebSocket和服務器發送事件是客戶端和服務器(如Web瀏覽器和Web服務器)之間流行的通信協議。首先,讓我們了解標準HTTP  Web請求。以下是常規HTTP請求的一系列事件:

  1. 客戶端打開連接并從服務器請求數據。

  2. 服務器計算響應。

  3. 服務器根據打開的請求將響應發送回客戶端。

長輪詢、WebSocket、服務器發送事件有什么區別

Ajax輪詢協議

輪詢是絕大多數AJAX應用程序使用的一種標準技術。基本思想是客戶端反復輪詢(或請求)服務器以獲取數據。客戶端發出請求,并等待服務器響應數據。如果沒有可用數據,則返回空響應。

  1. 客戶端使用常規HTTP打開連接并從服務器請求數據。

  2. 所請求的網頁以固定間隔將請求發送到服務器(例如0.5秒)。

  3. 服務器計算響應并將其發送回,就像常規HTTP流量一樣。

  4. 客戶端定期重復上述三個步驟,以從服務器獲取更新。

輪詢的問題在于客戶端必須不斷向服務器詢問任何新數據。會照成許多空響應,從而造成HTTP開銷。

長輪詢、WebSocket、服務器發送事件有什么區別

HTTP長輪詢協議

這是傳統輪詢技術的一種變體,該技術允許服務器在數據可用時將信息推送到客戶端。使用Long-Polling,客戶端可以像正常輪詢一樣從服務器請求信息,但是服務器可能不會立即響應。這就是為什么這種技術有時被稱為“掛起請求”的原因。

  • 如果服務器沒有可供客戶端使用的任何數據,則服務器將保留請求并等待直到某些數據可用為止,而不是發送空響應。

  • 一旦數據可用,完整的響應將發送到客戶端。然后,客戶端立即從服務器重新請求信息,以便服務器幾乎始終具有可用的等待請求,服務器可以使用該請求來響應事件。

使用HTTP Long-Polling的應用程序的基本生命周期如下:

  • 客戶端使用常規HTTP發出初始請求,然后等待響應。

  • 服務器延遲其響應,直到有可用的更新或發生超時為止。

  • 當有可用更新時,服務器會將完整的響應發送到客戶端。

  • 客戶端通常會在收到響應后立即發送新的長輪詢請求,或者在允許的等待時間的暫停后發送新的長輪詢請求。

  • 每個長輪詢請求都有一個超時。由于超時而關閉連接后,客戶端必須定期重新連接。

長輪詢、WebSocket、服務器發送事件有什么區別

WebSockets協議

WebSocket提供全雙工單個TCP連接上的通信通道。它提供了客戶端和服務器之間的持久連接,雙方都可以使用該連接隨時開始發送數據。客戶端通過稱為WebSocket握手的過程建立WebSocket連接。如果該過程成功,則服務器和客戶端可以隨時在兩個方向上交換數據。WebSocket協議使客戶端和服務器之間的通信具有較低的開銷,從而促進了與服務器之間的實時數據傳輸。通過提供一種標準化的方法,使服務器無需客戶端詢問即可將內容發送到瀏覽器,并允許消息在保持連接打開的情況下來回傳遞。

長輪詢、WebSocket、服務器發送事件有什么區別

服務器發送事件協議(SSEs)

在SSEs下,客戶端與服務器建立持久的長期連接。服務器使用此連接將數據發送到客戶端。如果客戶端要向服務器發送數據,則需要使用另一種技術/協議。

  1. 客戶端使用常規HTTP向服務器請求數據。

  2. 所請求的網頁將打開與服務器的連接。

  3. 只要有新信息可用,服務器就會將數據發送到客戶端。

當我們需要從服務器到客戶端的實時流量,或者服務器正在循環生成數據并將向客戶端發送多個事件時,SSEs最好。

長輪詢、WebSocket、服務器發送事件有什么區別

總結

常見的前后端消息通信協議如下:

  • 傳統的輪詢協議

  • Http長輪詢協議

  • WebSockets協議

  • SSEs協議

SSEs協議剖析

其中除了SSEs協議,其他方法大家都很熟悉了,再來看看SSEs到底是個啥?

SSE,即 Server-Sent Events,又叫 EventSource,是一種已被寫入 HTML 5  標準的服務端事件推送技術,它允許客戶端和服務端之間建立一個單向通道,以讓服務端向客戶端單方向持續推送事件消息,SSE  適用于不需要從客戶端發送數據,但要通過某些服務器操作進行更新的場景,例如股票行情、共享設施更新、好友狀態更新等。

上面已經簡介過其大致流程了,簡單說,所謂SSE,就是瀏覽器向服務器發送一個HTTP請求,然后服務器不斷單向地向瀏覽器推送“信息”(message)。這種信息在格式上很簡單,就是“信息”加上前綴“data:  ”,然后以“\n\n”結尾。

SSE與WebSocket有相似功能,都是用來建立瀏覽器與服務器之間的通信渠道。

兩者的對比如下:

SSEWebsocket
http 協議,可以直接運行于現有的代理服務器和認證技術獨立的 websocket 協議,需要服務器端支持
SSE是單向通道,只能服務器向瀏覽器端發送。全雙工通道,可以雙向通信,功能更強
輕量級,實現簡單實現相對復雜
默認支持斷線重連需要自己實現心跳斷線重連
文本傳輸二進制傳輸
支持自定義發送的消息類型

客戶端DEMO

<script type="text/javascript">     if (!!window.EventSource) {         var source = new EventSource('push');         //打開連接         source.addEventListener('open', function (evt) {             // console.info("連接已經打開了");         }, false);         //接收消息         source.addEventListener('message', function (evt) {             console.info(evt.data);         });         //錯誤消息,及關閉通知         source.addEventListener('error', function (evt) {             // console.info(evt);         }, false);     } else {         alert("瀏覽器不支持  SSE")     } </script>

服務端DEMO

首先向客戶端聲明接下來發送的是事件流text/event-stream類型的數據,然后就可以向客戶端多次發送消息。事件流是一個簡單的文本流,僅支持  UTF-8 格式的編碼。每條消息以一個空行作為分隔符。

@RestController public class SSEsController {      //向瀏覽器發送數據     @RequestMapping(value = "/push", produces = "text/event-stream")     public String push() throws InterruptedException {         String msg = ...;         //固定格式         return "data:" + msg + "\n\n";     } }

關于“長輪詢、WebSocket、服務器發送事件有什么區別”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

虎林市| 青阳县| 思南县| 盐津县| 安泽县| 瑞安市| 甘德县| 苍梧县| 九台市| 昂仁县| 普兰店市| 武定县| 南平市| 昆明市| 宜都市| 曲水县| 吉林省| 会泽县| 凤冈县| 交口县| 杨浦区| 濮阳市| 兴业县| 津市市| 临桂县| 广元市| 田阳县| 西林县| 邹城市| 沙洋县| 乳山市| 固阳县| 周至县| 含山县| 贡嘎县| 新郑市| 丁青县| 伊金霍洛旗| 鸡东县| 陇川县| 化隆|