html5的websockets全雙工通訊詳解學習範例_html5教學技巧
目前即時Web應用的實現方式,大部分是圍繞輪詢和其他伺服器端推送技術展開的,其中最著名的是Comet。 Comet技術可以讓伺服器主動以非同步方式向客戶端推送資料。
使用輪詢時,瀏覽器定期發送HTTP請求,並隨即接收回應;使用長輪詢時,瀏覽器向伺服器發送請求,伺服器會在一段時間內將其保持在開啟狀態;使用串流解決方案時,瀏覽器會發送完整的HTTP請求,但伺服器會傳送並保持一個處於開啟狀態的回應,該回應持續更新並無限期處於開啟狀態。
上述的三個方法,在發送即時數據時都會涉及到HTTP請求和回應包頭,且包含大量額外的、不必要的報頭數據,會造成傳輸延遲。
一、解讀HTML5 WebSockets
1、WebSocket握手
為了建立WebSocket通信,客戶端和伺服器在初始握手時,將HTTP協定升級到WebSocket協定。一旦連線建立成功,就可以在全雙工模式下在客戶端和伺服器之間來回傳送WebSocket訊息。
註:在網路中,每個訊息以0x00位元組開頭,以0xFF結尾,中間資料採用UTF-8編碼格式。
2、WebSocket介面
除了WebSocket協定的定義之外,還定義了用於JavaScript應用程式的WebSocket介面。
interm URL;
//就緒狀態
const unsigned short CONNECTING = 0;
const unsigned short OPEN = 1;
const unsigned short CLOSED = 2; >readonly attribute unsigned short bufferedAmount;
//網路
attribute Function onopen;
attribute Function onmessage;
attribute Function onclose; ();
};
WebSocket implements EventTarget;
注意:ws://和wss://前綴分別表示WebSocket連線和安全的WebSocket連線。
本節討論HTML5 WebSockets的使用方法
透過window.WebSocket來判斷瀏覽器是否支援。
2、API的基本用法
a. WebSocket物件的建立以及與WebSocket伺服器的連線
複製代碼
b. 新增事件監聽器
WebSocket遵循非同步程式設計模型,開啟socket後,只需等待事件發生,而不需主動向伺服器輪詢,因此需要加入回呼函數來監聽事件。
複製程式碼
}
ws.onclose = function(){
log("closed");
}
c. 傳送訊息
當socket處於開啟狀態(即在呼叫onopen監聽程式之後,在呼叫onclose監聽程式之前),可以使用send方法傳送訊息。
三、HTML5 WebSockets 應用範例
本節將結合前面所述的Geolocation介面來建立一個直接在Web頁面中計算距離的應用程式。
1、寫HTML檔
複製程式碼
HTML5 WebSocket / Geolocation 追蹤器
你的瀏覽器不支援HTML5 Geolocation
你的瀏覽器不支援HTML5 Web Sockets
2、新增WebSocket程式碼
function loadDemo()>De /確保瀏覽器支援WebSocket
if(window.WebSocket){
url = "ws://localhost:8080";//broadcast WebSocket伺服器位置
ws = new WebSocket(url);
ws.onopen = function(){
updateSocketStatus("連線已建立");
}
ws.onmessage = function(e){
updateSocketeStatus("更新位置資料:" dataReturned( e.data));
}
}
}
if
if
if
if
if
if
if
if
if
if
.geolocation){
geo = navigator.geolocation;
updateGeolocationStatus("瀏覽器支援HTML5 Geolocation");
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 WebSocket / Geolocation 追踪器
你的浏览器不支持HTML5 Geolocation
你的浏览器不支持HTML5 Web Sockets

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)