衣鵬
摘 要
本文主要介紹了Web實時消息交互技術,以及目前在Web應用中進行實時消息交互的一些主流技術。
【關鍵詞】Web 實時消息
隨著Web的發展,客戶端與服務端之間的實時消息交互成為人們溝通交流的重要方式。比如門戶網站的實時新聞、SNS網站的用戶互動、企業網站的在線客服、大宗商品的即時交易、遠程設備的實時監控等常見的場景都需要用到基于Web的實時消息交互技術。
1 概述
Web實時消息交互應用需要服務器端實時地、主動地將后臺出現的變化呈現在客戶端的瀏覽器上,而無需客戶手動地去刷新頁面。
在傳統的HTTP請求/響應模式下,客戶端每建立一個連接都要向服務器端發送一個HTTP請求,當收到來自服務器端的HTTP響應后,如果該響應完全被發送或接收,服務器端就會關閉該連接。
2 主流的Web實時消息交互技術
2.1 客戶端輪詢模式(Polling)
客戶端通過執行網頁中的JS輪詢腳本,經由HTTP方式向服務器端定期循環的發送請求,詢問是否有新的消息產生,接收來自服務器的請求響應,返回相應信息,如果服務器端沒有響應,則會在相應的指令,關閉連接,等待后發送下一個請求。
優點:使用方便,實現簡單,開發成本低,無需做過多的更改。
缺點:如果輪詢間隔過長,會導致消息出現延遲,用戶無法及時接收更新的數據。如果輪詢時間過短,則會導致查詢請求過多,增加網絡資源消耗,服務器易產生峰值請求。
2.2 長輪詢模式(Long-Polling)
又稱服務端的輪。它是指當客戶端通過執行網頁中的JS輪詢腳本,經由HTTP方式向服務器端發送請求,建立連接后,如果服務器端沒有新的數據,就會保持連接,不斷地去查詢后臺消息,等待有效的更新,一旦有新消息產生,服務器就將消息返回給客戶端。客戶端收到響應消息后會立即關閉鏈接,并發送新的請求,開始下一次新的輪詢。
優點:時效性強,消息能及時返回客戶端;無消息更新不會頻繁請求,減少了不停地創建、關閉HTTP請求造成的不必要浪費。
缺點:開發成本高,實現復雜,需第三方庫支持;服務端保持大量連接的維護開銷大;多個數據發送會耗費大量的服務器性能;每次產生消息后都需要重新創建連接。
2.3 基于流的模式( Http Streaming )
該模式下,客戶端與服務器端會持續保持連接,當服務器端有新的消息更新時,服務器端就會通過該持續連接源源不斷的將消息返回給客戶端。該模式與前面的長輪詢模式相似,只是不需要多次建立連接。
優點:新的消息可以實時到達客戶端;客戶端與服務器端一次建立連接,持續有效。
缺點:服務器端需要保持大量連接,及時響應后臺的消息更新,開銷較大。
2.4 Server-Sent Events (SSE)
SSE模式與長輪詢類似,區別在于SSE的每個連接不只發送一個消息,通常會重用以處理多個消息。當客戶端與服務器端建立連接后,服務器端就持續保持該連接到一個有效的消息產生,并將該消息返回給客戶端。此時,先前建立的連接并不關閉,還可以繼續用于另一個有效消息的發送。一旦有新消息準備好,該連接就會將其發送回客戶端。
優點:基于HTML5標準;定義了專用媒體類型text/event-stream;提供了標準JS的客戶端API實現;開發實現簡單;一個連接可發送多個數據。
缺點:服務器端只能向客戶端單向推送數據;主流的IE瀏覽器不支持EventSource。
2.5 HTML5 Websocket
WebSocket是一種復雜的服務器端雙向傳輸技術。它基于HTML5標準,提供了在客戶端與服務器端進行全雙工通訊的網絡技術。客戶端和服務器端只需要通過握手動作就能迅速建立一條雙向快速通道,兩者就可以隨意向對方發送數據。此時,在新的WebSocket連接上的交互就不再是基于HTTP協議了。該技術可以用于在兩個方向上快速交互小塊數據的應用場景中。
優點:基于最新的HTML5標準;可以實現真正的實時通訊和雙向交互;大量節約服務器資源和帶寬。
缺點:客戶端需要支持HTML5;開發難度較高,需要專門處理WebSocket協議。
2.6 Flash XMLSocket
該技術在頁面中內嵌一個使用了XMLSocket類的Flash程序。JavaScript通過調用此Flash程序提供的Socket接口與服務器端的Socket接口進行通信。JavaScript在收到服務器端以XML格式傳送的信息后可以很容易地控制HTML頁面的顯示。
優點:增強了客戶端的處理能力;實現真正的即時而非偽即時通信。
缺點:客戶端必須安裝Flash插件;非HTTP協議;XMLSocket類不能自動穿過防火墻;需要設置一個通信端口。
2.7 Comet
Comet是一種基于HTTP長連接、無須在客戶端安裝插件的“服務器推”技術。該技術可使服務器將更新的信息實時地傳送到客戶端,而無須客戶端發出請求。目前有長輪詢和Iframe流兩種實現方式。長輪詢是在建立連接以后保持,直到服務器推送數據后再關閉的方式。Iframe流方式是在頁面中插入一個隱藏的Iframe,利用其src屬性在服務器和客戶端之間創建一條長鏈接,服務器向Iframe傳輸數據,來實時更新頁面。
優點:消息即時到達,不發送無用請求。
缺點:服務器端維持長連接會增加網絡開銷。
3 結語
實時消息技術在互聯網中的應用越來越廣,涵蓋的內容也越來越多,我們在此僅做概略性的介紹。在實際應用中,每種業務場景都要考慮各方面的細節,具體問題具體對待,需要大家在實際的開發應用中見仁見智了。
參考文獻
[1]韋伯,帕拉斯泰迪斯,魯濱遜.REST實戰[M].南京:東南大學出版社,2011.
[2]Darren Cook.Data Push Apps with HTML5 SSE[M].O'Reilly Media,2014.
作者單位
七一三七五部隊 山東省濰坊市 262600