目前即時Web應用的實現方式,大部分是圍繞輪詢和其他伺服器端推送技術展開的,其中最著名的是Comet。 Comet技術可以讓伺服器主動以非同步方式向客戶端推送資料。
使用輪詢時,瀏覽器定期發送HTTP請求,並隨即接收回應;使用長輪詢時,瀏覽器向伺服器發送請求,伺服器會在一段時間內將其保持在開啟狀態;使用串流解決方案時,瀏覽器會發送完整的HTTP請求,但伺服器會傳送並保持一個處於開啟狀態的回應,該回應持續更新並無限期處於開啟狀態。
上述的三個方法,在發送即時數據時都會涉及到HTTP請求和回應包頭,且包含大量額外的、不必要的報頭數據,會造成傳輸延遲。
一、解讀HTML5 WebSockets
1、WebSocket握手
為了建立WebSocket通信,客戶端和伺服器在初始握手時,將HTTP協定升級到WebSocket協定。一旦連線建立成功,就可以在全雙工模式下在客戶端和伺服器之間來回傳送WebSocket訊息。
註:在網路中,每個訊息以0x00位元組開頭,以0xFF結尾,中間資料採用UTF-8編碼格式。
2、WebSocket介面
除了WebSocket協定的定義之外,還定義了用於JavaScript應用程式的WebSocket介面。
本節討論HTML5 WebSockets的使用方法
透過window.WebSocket來判斷瀏覽器是否支援。
2、API的基本用法
a. WebSocket物件的建立以及與WebSocket伺服器的連線
複製代碼
複製程式碼
三、HTML5 WebSockets 應用範例
本節將結合前面所述的Geolocation介面來建立一個直接在Web頁面中計算距離的應用程式。
1、寫HTML檔
複製程式碼
你的瀏覽器不支援HTML5 Geolocation
你的瀏覽器不支援HTML5 Web Sockets
2、新增WebSocket程式碼
geo.watchPosition(updateLocation,handleLocationError,{maximumAge:20000});//每20s更新一次
function updateLocation(position){
var latitude = position.coords.latitude;var longitude = position.coords.longitude;
var timestamp = position.Statpampate;更新時間:" timestamp); var toSend = JSON.stringify([myId,latitude,longitude]);
sendMyLocation(toSend);
你的浏览器不支持HTML5 Geolocation
你的浏览器不支持HTML5 Web Sockets