天天看點

前端實時通信的幾種方式及其優缺點

1.短輪詢

短輪詢的原理很簡單,每隔一段時間用戶端就發出一個請求,去擷取伺服器最新的資料,一定程度上模拟實作了即時通訊。

優點:相容性強,實作非常簡單

缺點:延遲性高,請求中有大半是無用,非常消耗帶寬和伺服器資源,影響性能,

2.comet

comet有兩種主要實作手段,一種是基于 AJAX 的長輪詢(long-polling)方式,另一種是基于 Iframe 及 htmlfile 的流(streaming)方式,通常被叫做長連接配接。

具體兩種手段的操作方法請移步Comet技術詳解:基于HTTP長連接配接的Web端實時通信技術

長輪詢:用戶端向伺服器發送Ajax請求,伺服器接到請求後hold住連接配接,直到有新消息才傳回響應資訊并關閉連接配接,用戶端處理完響應資訊後再向伺服器發送新的請求。

優點:相容性好,在無消息的情況下不會頻繁的請求,資源浪費較小

缺點:伺服器hold連接配接會消耗資源,傳回資料順序無保證,難于管理維護

應用: webQQ、開心網、校内,Hi網頁版、Facebook IM等等

長連接配接:在頁面裡嵌入一個隐蔵iframe,将這個隐蔵iframe的src屬性設為對一個長連接配接的請求或是采用xhr請求,伺服器端就能源源不斷地往用戶端輸入資料。

優點:相容性好,消息即時到達,不發無用請求

缺點:伺服器維護長連接配接消耗資源

執行個體:Gmail聊天

3.SSE 使用指南請看Server-Sent Events 教程

SSE(Server-Sent Event,服務端推送事件)是一種允許服務端向用戶端推送新資料的HTML5技術

優點:基于HTTP而生,是以不需要太多改造就能使用,使用友善,而websocket非常複雜,必須借助成熟的庫或架構

缺點:基于文本傳輸效率沒有websocket高,不是嚴格的雙向通信,用戶端向服務端發送請求無法複用之前的連接配接,需要重新發出獨立的請求

4.Websocket

Websocket是一個全新的、獨立的協定,基于TCP協定,與http協定相容、卻不會融入http協定,僅僅作為html5的一部分,其作用就是在伺服器和用戶端之間建立實時的雙向通信。

優點:真正意義上的實時雙向通信,性能好,低延遲

缺點:獨立與http的協定,是以需要額外的項目改造,使用複雜度高,必須引入成熟的庫,無法相容低版本浏覽器

5.Web Worker

Web Worker 的作用,就是為 JavaScript 創造多線程環境,允許主線程建立 Worker 線程,将一些任務配置設定給後者運作

6.Service workers

Service workers 本質上充當Web應用程式與浏覽器之間的代理伺服器,也可以在網絡可用時作為浏覽器和網絡間的代理,建立有效的離線體驗。

7、Flash Socket:在頁面中内嵌入一個使用了Socket類的 Flash 程式JavaScript通過調用此Flash程式提供的Socket接口與伺服器端的Socket接口進行通信,JavaScript在收到伺服器端傳送的資訊後控制頁面的顯示。 一般用在網絡遊戲中,web端基本不适用,加上早在 2017 年 7 月,Flash 的娘家 Adobe 已宣布在 2020年 底終止對 Flash 的支援。各個浏覽器也在2020年底左右終止對 Flash 的支援

優點:實作真正的即時通信,而不是僞即時。

缺點:用戶端必須安裝Flash插件;非HTTP協定,無法自動穿越防火牆。

執行個體:網絡互動遊戲。