長輪詢、WebSocket、伺服器傳送事件 (SSE) 和 Comet 是什麼?
長輪詢、WebSocket、伺服器傳送事件 (SSE) 和 Comet 是客戶端與伺服器進行即時連線的一些方法。這些將在接下來的段落中討論。
長輪詢
這是一種技術,客戶端向伺服器請求資訊,但不會立即期望響應。它涉及向伺服器傳送 HTTP 請求,然後保持連線開啟,以便伺服器稍後可以響應。伺服器使用長輪詢允許瀏覽器大約 6 個同時連線。
與其他方法相比,在這種情況下負載均衡很簡單。長輪詢是最傳統的方法,並且所有 Web 瀏覽器都支援它。由於更新次數有限,它不支援重新連線。長輪詢對伺服器的資源消耗更大,但瀏覽器對其支援更普遍。
WebSocket
WebSocket 是一種計算機通訊技術,允許我們透過單個 TCP 連線擁有全雙工通訊通道。
WebSocket 協議允許 Web 瀏覽器和 Web 伺服器之間進行輕量級互動,允許從伺服器到伺服器以及從伺服器到客戶端的即時資料流。這是透過建立一種通用方法來實現的,伺服器可以透過這種方法向客戶端傳輸資訊,而無需首先從客戶端接收請求,然後在連線保持開啟狀態時啟用訊息來回傳輸。在這種方法中,客戶端和伺服器可以輕鬆地進行雙向持續對話。
包括 Google Chrome、Opera、Edge、Firefox、Safari 等在內的瀏覽器廣泛支援 WebSocket。WebSocket 是一種輕量級的瀏覽器擴充套件,允許最多 1024 個同時連線。它使用複雜的負載均衡和代理系統。它還允許檢測丟失的客戶端,這在之前的擴充套件輪詢中是不可用的,儘管它不支援重新連線。
伺服器傳送事件 (SSE)
這是一種技術,允許瀏覽器透過 HTTP 連線自動接收來自任何伺服器的更新。
WHATWG(Web 超文字應用程式技術工作組)提出了這個概念,Opera Web 瀏覽器在 2006 年率先採用它。這是一個規範,解釋了伺服器如何在建立客戶端連線後啟動與客戶端的資料傳輸。它們使用稱為 EventSource 的 JavaScript API 向客戶端傳送訊息更新或持續更新,以改進跨瀏覽器流。
只有少數瀏覽器支援 SSE,包括 Mozilla、Chrome 和 Safari。Internet Explorer 和 Edge 仍然不支援此方法。它還允許瀏覽器最多進行六個同時連線。它允許簡單的負載均衡和 EventSource 支援的重新連線管理。
Comet
這是一種 Web 應用程式範例,伺服器使用長時間保持的 HTTPS 請求將資料推送到客戶端伺服器(即 Web 瀏覽器),而無需 Web 瀏覽器主動請求任何資料更新。Comet 也被稱為各種其他名稱,包括 Ajax 推送、反向 Ajax 等。Comet 背後的核心概念是執行單個正常的 HTTPS 請求並依賴於無限的響應。
Web 伺服器接受新的傳入請求並開始使用當前資料的新響應,但伺服器不會關閉響應流,因此瀏覽器保持連線開啟並等待更多資料。在每次更新結束時,伺服器都會提供一個唯一的字串。例如,“ThisCometMessageEnded”。
透過提供雙向通訊,Comet 消除了逐頁 Web 範例和輪詢的限制。