内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

html5的websockets全雙工通信示例分析

本篇內(nèi)容介紹了“html5的websockets全雙工通信示例分析”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)成立與2013年,先為南皮等服務(wù)建站,南皮等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為南皮企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

目前實(shí)時(shí)Web應(yīng)用的實(shí)現(xiàn)方式,大部分是圍繞輪詢和其他服務(wù)器端推送技術(shù)展開(kāi)的,其中最著名的是Comet。Comet技術(shù)可以讓服務(wù)器主動(dòng)以異步方式向客戶端推送數(shù)據(jù)。

使用輪詢時(shí),瀏覽器定期發(fā)送HTTP請(qǐng)求,并隨即接收響應(yīng);使用長(zhǎng)輪詢時(shí),瀏覽器向服務(wù)器發(fā)送一個(gè)請(qǐng)求,服務(wù)器會(huì)在一段時(shí)間內(nèi)將其保持在打開(kāi)狀態(tài);使用流解決方案時(shí),瀏覽器會(huì)發(fā)送一個(gè)完整的HTTP請(qǐng)求,但服務(wù)器會(huì)發(fā)送并保持一個(gè)處于打開(kāi)狀態(tài)的響應(yīng),該響應(yīng)持續(xù)更新并無(wú)限期處于打開(kāi)狀態(tài)。

上述的三個(gè)方法,在發(fā)送實(shí)時(shí)數(shù)據(jù)時(shí)都會(huì)涉及到HTTP請(qǐng)求和響應(yīng)包頭,且包含大量額外的、不必要的報(bào)頭數(shù)據(jù),會(huì)造成傳輸延遲。

一、解讀HTML5 WebSockets

1、WebSocket握手

為了建立WebSocket通信,客戶端和服務(wù)器在初始握手時(shí),將HTTP協(xié)議升級(jí)到WebSocket協(xié)議。一旦連接建立成功,就可以在全雙工模式下在客戶端和服務(wù)器之間來(lái)回傳送WebSocket消息。

注:在網(wǎng)絡(luò)中,每個(gè)消息以0x00字節(jié)開(kāi)頭,以0xFF結(jié)尾,中間數(shù)據(jù)采用UTF-8編碼格式。

2、WebSocket接口

除了對(duì)WebSocket協(xié)議的定義之外,還定義了用于JavaScript應(yīng)用程序的WebSocket接口。

復(fù)制代碼

代碼如下:

interface WebSocket{

readonly attribute DOMString URL;

//就緒狀態(tài)

const unsigned short CONNECTING = 0;

const unsigned short OPEN = 1;

const unsigned short CLOSED = 2;

readonly attribute unsigned short readyState;

readonly attribute unsigned short bufferedAmount;

//網(wǎng)絡(luò)

attribute Function onopen;

attribute Function onmessage;

attribute Function onclose;

boolean send(in DOMSString data);

void close();

};

WebSocket implements EventTarget;

注意:ws://和wss://前綴分別表示W(wǎng)ebSocket連接和安全的WebSocket連接。

二、HTML5 WebSockets API

本節(jié)討論HTML5 WebSockets的使用方法

1、檢測(cè)瀏覽器是否支持

通過(guò)window.WebSocket來(lái)判斷瀏覽器是否支持。

2、API的基本用法

a. WebSocket對(duì)象的創(chuàng)建以及與WebSocket服務(wù)器的連接

復(fù)制代碼

代碼如下:

url = "ws://localhost:8080/echo";

ws = new WebSocket(url);

b. 添加事件監(jiān)聽(tīng)器

WebSocket遵循異步編程模型,打開(kāi)socket后,只需等待事件發(fā)生,而不需主動(dòng)向服務(wù)器輪詢,因此需要添加回調(diào)函數(shù)來(lái)監(jiān)聽(tīng)事件。

WebSocket對(duì)象有三個(gè)事件:open、close和message。當(dāng)連接建立時(shí)觸發(fā)open事件,當(dāng)收到消息時(shí)觸發(fā)message事件,當(dāng)WebSocket連接關(guān)閉時(shí)觸發(fā)close事件。

復(fù)制代碼

代碼如下:

ws.onopen = function(){

log("open");

}

ws.onmessage = function(){

log(e.data);

}

ws.onclose = function(){

log("closed");

}

c. 發(fā)送消息

當(dāng)socket處于打開(kāi)狀態(tài)(即調(diào)用onopen監(jiān)聽(tīng)程序之后,調(diào)用onclose監(jiān)聽(tīng)程序之前),可以使用send方法發(fā)送消息。

ws.send("Hello World");

三、HTML5 WebSockets 應(yīng)用示例

本節(jié)將結(jié)合前面講述的Geolocation接口來(lái)創(chuàng)建一個(gè)直接在Web頁(yè)面中計(jì)算距離的應(yīng)用。

1、編寫(xiě)HTML文件

復(fù)制代碼

代碼如下:

<!DOCTYPE html></p><p><html></p><p> <head></p><p> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></p><p> <title>HTML5 WebSocket / Geolocation 追蹤器</title></p><p> <link rel="stylesheet" href="styles.css"></p><p> </head></p><p> <body onload="loadDemo()"></p><p> <h2>HTML5 WebSocket / Geolocation 追蹤器</h2></p><p> <div><strong>Geolocation</strong>: <p id="geoStatus">你的瀏覽器不支持HTML5 Geolocation</p></div></p><p> <div><strong>WebSocket</strong>: <p id="socketStatus">你的瀏覽器不支持HTML5 Web Sockets</p></div></p><p> </body></p><p></html>

2、添加WebSocket代碼

復(fù)制代碼

代碼如下:

function loadDemo(){

//確保瀏覽器支持WebSocket

if(window.WebSocket){

url = "ws://localhost:8080";//broadcast WebSocket服務(wù)器位置

ws = new WebSocket(url);

ws.onopen = function(){

updateSocketStatus("連接已建立");

}

ws.onmessage = function(e){

updateSocketeStatus("更新位置數(shù)據(jù):" + dataReturned(e.data));

}

}

}

3、添加Geolocation代碼

復(fù)制代碼

代碼如下:

var geo;

if(navigator.geolocation){

geo = navigator.geolocation;

updateGeolocationStatus("瀏覽器支持HTML5 Geolocation");

}</p><p>geo.watchPosition(updateLocation,handleLocationError,{maximumAge:20000});//每20s更新一次</p><p>function updateLocation(position){

var latitude = position.coords.latitude;

var longitude = position.coords.longitude;

var timestamp = position.timestamp;

updateGeolocationStatus("位置更新時(shí)間:" + timestamp);

var toSend = JSON.stringify([myId,latitude,longitude]);

sendMyLocation(toSend);

}

4、合并所有內(nèi)容

復(fù)制代碼

代碼如下:

<!DOCTYPE html></p><p><html></p><p> <head></p><p> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></p><p> <title>HTML5 WebSocket / Geolocation 追蹤器</title></p><p> <link rel="stylesheet" href="styles.css"></p><p> </head></p><p> <body onload="loadDemo()"></p><p> <h2>HTML5 WebSocket / Geolocation 追蹤器</h2></p><p> <div><strong>Geolocation</strong>: <p id="geoStatus">你的瀏覽器不支持HTML5 Geolocation</p></div></p><p> <div><strong>WebSocket</strong>: <p id="socketStatus">你的瀏覽器不支持HTML5 Web Sockets</p></div></p><p> </body></p><p> <script></p><p> //WebSocket的引用</p><p> var ws;</p><p> //為該會(huì)話生成的唯一隨機(jī)的ID</p><p> var myId = Math.floor(100000*Math.random());</p><p> //當(dāng)前顯示的行數(shù)</p><p> var rowCount;</p><p> function updateSocketStatus(message){</p><p> document.getElementById("socketStatus").innerHTML = message;</p><p> }</p><p> function updateGeolocationStatus(message){</p><p> document.getElementById("geoStatus").innerHTML = message;</p><p> }</p><p> function loadDemo(){</p><p> //確保瀏覽器支持WebSocket</p><p> if(window.WebSocket){</p><p> url = "ws://localhost:8080";//broadcast WebSocket服務(wù)器位置</p><p> ws = new WebSocket(url);</p><p> ws.onopen = function(){</p><p> updateSocketStatus("連接已建立");</p><p> }</p><p> ws.onmessage = function(e){</p><p> updateSocketStatus("更新位置數(shù)據(jù):" + dataReturned(e.data));</p><p> }</p><p> }</p><p> var geo;</p><p> if(navigator.geolocation){</p><p> geo = navigator.geolocation;</p><p> updateGeolocationStatus("瀏覽器支持HTML5 Geolocation");</p><p> }</p><p> geo.watchPosition(updateLocation,handleLocationError,{maximumAge:20000});//每20s更新一次</p><p> function updateLocation(position){</p><p> var latitude = position.coords.latitude;</p><p> var longitude = position.coords.longitude;</p><p> var timestamp = position.timestamp;</p><p> updateGeolocationStatus("位置更新時(shí)間:" + timestamp);</p><p> var toSend = JSON.stringify([myId,latitude,longitude]);</p><p> sendMyLocation(toSend);</p><p> }</p><p> function sendMyLocation(newLocation){</p><p> if(ws){</p><p> ws.send(newLocation)</p><p> }</p><p> }</p><p> function dataReturned(locationData){</p><p> var allData = JSON.parse(locationData);</p><p> var incomingId = allData[1];</p><p> var incomingLat = allData[2];</p><p> var incomingLong = allData[3];</p><p> var incomingRow = document.getElementById(incomingId);</p><p> if(!incomingRow){</p><p> incomingRow = document.getElementById("div");</p><p> incomingRow.setAttribute("id",incomingId);</p><p> incomingRow.userText = (incomingId == myId)?"Me":'User' + rowCount;</p><p> rowCount++;</p><p> document.body.appendChild(incomingRow);</p><p> }</p><p> incomingRow.innerHTML = incomingRow.userText + " // Lat: " +</p><p> incomingLat + " // Lon: " +</p><p> incomingLong;</p><p> return incomingRow.userText;</p><p> }</p><p> function handleLocationError(error){</p><p> switch(error.code){</p><p> case 0:</p><p>updateGeolocationStatus("檢索位置信息出錯(cuò): " + error.message);</p><p>break;</p><p> case 1:</p><p>updateGeolocationStatus("用戶阻止獲取位置信息。");</p><p>break;</p><p> case 2:</p><p>updateGeolocationStatus("瀏覽器不能檢測(cè)你的位置信息: " + error.message);</p><p>break;</p><p> case 3:</p><p>updateGeolocationStatus("瀏覽器檢索位置信息超時(shí)。");</p><p>break;</p><p> }

}</p><p> </script></p><p></html>

“html5的websockets全雙工通信示例分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

新聞名稱:html5的websockets全雙工通信示例分析
分享網(wǎng)址:http://www.rwnh.cn/article12/pgcsgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)站設(shè)計(jì)公司、自適應(yīng)網(wǎng)站網(wǎng)站排名、網(wǎng)站建設(shè)、域名注冊(cè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
怀来县| 磐石市| 竹北市| 拜泉县| 新宁县| 昌宁县| 芷江| 团风县| 杭锦旗| 武鸣县| 泸西县| 天峨县| 义乌市| 江华| 榆林市| 朝阳区| 专栏| 黑龙江省| 河间市| 东阳市| 增城市| 舒兰市| 牡丹江市| 河源市| 舒城县| 浙江省| 来凤县| 汪清县| 抚顺市| 偃师市| 墨江| 防城港市| 临沂市| 高雄市| 得荣县| 苗栗市| 宁津县| 潼关县| 西乌珠穆沁旗| 仁布县| 麻阳|