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