這篇文章主要介紹“HTML5的WebSocket與服務(wù)器推送事件實(shí)例分析”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“HTML5的WebSocket與服務(wù)器推送事件實(shí)例分析”文章能幫助大家解決問(wèn)題。
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括漳浦網(wǎng)站建設(shè)、漳浦網(wǎng)站制作、漳浦網(wǎng)頁(yè)制作以及漳浦網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,漳浦網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到漳浦省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!
WebSockets
Web Sockets 是用于 Web 應(yīng)用程序的新一代雙向通信技術(shù),運(yùn)行在單一套接字之上,它通過(guò) JavaScript 接口暴漏在 HTML5 兼容的瀏覽器中。
一旦取得 Web 服務(wù)器上的 Web Socket 連接之后,就可以通過(guò)調(diào)用 send() 方法從瀏覽器發(fā)送數(shù)據(jù)到服務(wù)器上,通過(guò) onmessage 事件處理程序從服務(wù)器接收數(shù)據(jù)到瀏覽器中。
下面是創(chuàng)建一個(gè)新的 WebSocket 對(duì)象的 API。
JavaScript Code復(fù)制內(nèi)容到剪貼板
var Socket = new WebSocket(url, [protocal] );
第一個(gè)參數(shù) url 用于指定要連接的 URL。第二個(gè)屬性 - 端口是可選的,如果提供,就會(huì)指定一個(gè)服務(wù)器必須支持連接成功的子協(xié)議。
WebSocket 屬性
下面是 WebSocket 對(duì)象的屬性。假定我們已經(jīng)創(chuàng)建了上述的 Socket 對(duì)象:
屬性 描述
Socket.readyState
只讀屬性readyState表示連接的狀態(tài)。有以下取值:
0 表示連接尚未建立。
1 表示連接已建立,可以進(jìn)行通信。
2 表示連接正在進(jìn)行關(guān)閉握手。
3 表示連接已經(jīng)關(guān)閉或者連接不能打開(kāi)。
Socket.bufferedAmount
只讀屬性bufferedAmount表示已經(jīng)使用 send() 方法排隊(duì)的 URF-8 文本字節(jié)數(shù)。
WebSocket 事件
下面是 WebSocket 對(duì)象相關(guān)的事件。假定我們已經(jīng)創(chuàng)建了上述的 Socket 對(duì)象:
事件 事件處理程序 描述
open Socket.onopen 建立 socket 連接時(shí)觸發(fā)這個(gè)事件。
message Socket.onmessage 客戶(hù)端從服務(wù)器接收數(shù)據(jù)時(shí)觸發(fā)。
error Socket.onerror 連接發(fā)生錯(cuò)誤時(shí)觸發(fā)。
close Socket.onclose 連接被關(guān)閉時(shí)觸發(fā)。
WebSocket 方法
下面是 WebSocket 對(duì)象相關(guān)的方法。假定我們已經(jīng)創(chuàng)建了上述的 Socket 對(duì)象:
方法 描述
Socket.send()
send(data) 方法使用連接傳輸數(shù)據(jù)。
Socket.close()
close() 方法用于終止任何現(xiàn)有連接。
服務(wù)器推送事件
傳統(tǒng)的 Web 應(yīng)用程序生成發(fā)送到 Web 服務(wù)器端的事件。比如,點(diǎn)擊一個(gè)鏈接會(huì)從服務(wù)器請(qǐng)求一個(gè)新頁(yè)面。
這種從 Web 瀏覽器到 Web 服務(wù)器的時(shí)間類(lèi)型可以稱(chēng)作客服端事件。
隨著 HTML5 的出現(xiàn),WHATWG Web Applications 1.0 引入了一個(gè)從 Web 服務(wù)器到 Web 瀏覽器的事件流,被稱(chēng)作服務(wù)器推送事件(SSE)。使用 SSE 可以不停的將 DOM 事件推送到用戶(hù)的瀏覽器中。
這個(gè)事件流方法會(huì)打開(kāi)一個(gè)到服務(wù)器的持久連接,新消息可用時(shí)發(fā)送數(shù)據(jù)到客戶(hù)端,從而不再需要持續(xù)的輪詢(xún)。
SSE Web 應(yīng)用程序
要在 Web 應(yīng)用程序中使用服務(wù)器推送事件,我們需要給文檔添加一個(gè) <eventsource>元素。
<eventsource> 元素的 src 屬性應(yīng)該指向一個(gè) URL,這個(gè) URL 應(yīng)該提供一個(gè) HTTP 持久連接用于發(fā)送包含事件的數(shù)據(jù)流。
這個(gè) URL 將會(huì)指向一個(gè)持續(xù)發(fā)送事件數(shù)據(jù)的 PHP,PERL 或者任意 Python 腳本。下面是一個(gè)簡(jiǎn)單的期望獲得服務(wù)器時(shí)間的 Web 應(yīng)用程序示例。
XML/HTML Code復(fù)制內(nèi)容到剪貼板
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
/* Define event handling logic here */
</script>
</head>
<body>
<div id="sse">
<eventsource src="/cgi-bin/ticker.cgi" />
</div>
<div id="ticker">
<TIME>
</div>
</body>
</html>
SSE 服務(wù)器端腳本
服務(wù)器端腳本應(yīng)該發(fā)送 Content-type 頭指定類(lèi)型為 text/event-stream,如下所示:
復(fù)制代碼
代碼如下:
print "Content-Type: text/event-stream/n/n";
設(shè)置 Content-type 之后,服務(wù)器端腳本將發(fā)送一個(gè)后面緊跟事件名稱(chēng)的 Event: 標(biāo)簽。下面的示例將會(huì)發(fā)送一個(gè)以換行符結(jié)束的 Server-Time 作為事件名稱(chēng)。
復(fù)制代碼
代碼如下:
print "Event: server-time/n";
最后一步是使用 Data: 標(biāo)簽發(fā)送事件數(shù)據(jù),緊隨其后的是以換行符結(jié)束的整數(shù)字符串值,如下所示:
復(fù)制代碼
代碼如下:
$time = localtime();
print "Data: $time/n";
下面是用 perl 編寫(xiě)的完整 ticker.cgi:
復(fù)制代碼
代碼如下:
#!/usr/bin/perl
print "Content-Type: text/event-stream/n/n";
while(true){
print "Event: server-time/n";
$time = localtime();
print "Data: $time/n";
sleep(5);
處理服務(wù)器推送事件
讓我們修改一下我們的 Web 應(yīng)用程序來(lái)處理服務(wù)器推送時(shí)間。下面是最終示例:
XML/HTML Code復(fù)制內(nèi)容到剪貼板
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
document.getElementsByTagName("eventsource")[0].
addEventListener("server-time", eventHandler, false);
function eventHandler(event)
{
// Alert time sent by the server
document.querySelector('#ticker').innerHTML = event.data;
}
</script>
</head>
<body>
<div id="sse">
<eventsource src="/cgi-bin/ticker.cgi" />
</div>
<div id="ticker" name="ticker">
[TIME]
</div>
</body>
</html>
在測(cè)試服務(wù)器推送事件之前,建議你確保你的 Web 瀏覽器支持這一概念。
關(guān)于“HTML5的WebSocket與服務(wù)器推送事件實(shí)例分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。
網(wǎng)頁(yè)標(biāo)題:HTML5的WebSocket與服務(wù)器推送事件實(shí)例分析
標(biāo)題路徑:http://www.rwnh.cn/article24/gcgice.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、域名注冊(cè)、網(wǎng)站維護(hù)、網(wǎng)站收錄、做網(wǎng)站、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(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)