1. 程式人生 > >前端學習(八十) DOM-Web Sockets(Dom)

前端學習(八十) DOM-Web Sockets(Dom)

簡單的說,web Sockets就是可以建立和伺服器進行雙向會話的高階技術

在web Scokets之前,通過輪詢的機制,定時向伺服器傳送請求,得到一個雙向會話保持實時更新,而web Scokets可以直接建立一個雙向會話

 

web Sockets

WebSocket

  • 用於連線webScoket伺服器的物件

CloseEvent

  • 關閉連線時WebSocket物件觸發的事件

MessageEvent

  • 從伺服器獲取到訊息的時候,WebSocket觸發的事件

 

WebScoket物件

用於建立和管理WebSockets連線,並通過該連線傳送和接收

WebSocket(url,protocols)

  • url:表示要連線的url
  • protocols:協議名字字串或陣列,表示子協議,預設為空

建立的時候有可能會丟擲異常SECURITY_ERR,這個錯誤說明,試圖連線的埠被遮蔽了

方法

close([code,[reason]])

關閉WebSocket連線或停止正在進行的連線請求

  • code:可選,關閉連線的狀態號,預設1000(正常關閉)
  • reason:可選,字串,表示連線被關閉的原因

異常

  • INVALID_ACCESS_ERR:無效的code
  • SYNTAX_ERR:reason字串太長

send(data)

通過WebSocket連線向伺服器傳送資料

  • data:傳送的資料

異常

  • INVALID_STATE_ERR:當前的連線的狀態不是OPEN
  • SYNTAX_ERR:資料中包含Unpaired surrogates

屬性

屬性名 型別 描述
binaryType string 傳輸的二進位制內容型別,blob/arrayBuffer
bufferedAmount long 呼叫send方法後,佇列中等待資料的大小,傳送完後為0,只讀
extension string 伺服器選定的擴充套件
onclose EventLinener 監聽close事件
onerror EventLinener 監聽error事件
onmessage EventLinener 監聽message事件,訊息到達時該事件會觸發
onopen EventLinener 監聽連線開啟事件,readyState為OPEN時會觸發事件
protocol string 表明伺服器選定的子協議的字串
readyState short 連線的當前狀態,只讀
url string 傳入構造器的url,只讀

其中readyState有常量定義

常量 描述
CONNENTING 0 連線還未開啟
OPEN 1 連線已開啟,並準備好開始通訊
CLOSING 2 連線正在關閉的過程中
CLOSED 3 連線已關閉,或無法建立

示例

            var w=new WebSocket('wss://echo.websocket.org');

            w.onopen = function (evt) { 
                console.log('連線正在開啟');
                w.send('你好123')
                
            }
            w.onmessage = function (evt) {
                console.log('接收的資訊:'+evt.data); //接收的資訊:你好123
                w.close()
            }
            w.onclose = function (evt) {
                console.log('連線已關閉');
                
            }

另外,注意,如果要支援Web Socket伺服器端也是要升級支援的

瞭解Socket.IO

這是一個成熟的庫,跟JQ那種已經封裝完畢優化了web Sockets,建議使用