前端學習(八十) DOM-Web Sockets(Dom)
阿新 • • 發佈:2018-12-28
簡單的說,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,建議使用