WebSocket簡介
一、什麽是WebSocket
1.1 WebSocket的概念
HTTP請求是基於請求響應模式的,客戶端永遠是主動的一方,這種單向請求的特點,註定了如果服務器有連續的狀態變化,客戶端要獲知就非常麻煩。我們只能使用 "輪詢" :每隔一段時候,就發出一個詢問,了解服務器有沒有新的信息。輪詢的效率低,非常浪費資源(因為必須不停連接,或者 HTTP 連接始終打開)。WebSocket 最大特點就是,服務器可以主動向客戶端推送信息,客戶端也可以主動向服務器發送信息,是真正的雙向平等對話,屬於 服務器推送技術 的一種。
1.2 WebSocket的特點
webSocket主要有以下幾個特點:
(1)建立在 TCP 協議之上,服務器端的實現比較容易。
(2)與 HTTP 協議有著良好的兼容性。默認端口也是80和443,並且握手階段采用 HTTP 協議,因此握手時不容易屏蔽,能通過各種 HTTP 代理服務器。
(3)數據格式比較輕量,性能開銷小,通信高效。
(4)可以發送文本,也可以發送二進制數據。
(5)沒有同源限制,客戶端可以與任意服務器通信。
(6)協議標識符是ws
(如果加密,則為wss
),服務器網址就是 URL。
WebSocket的工作過程:建立一個 WebSocket 連接,客戶端瀏覽器首先要向服務器發起一個 HTTP 請求,這個請求和通常的 HTTP 請求不同,包含了一些附加頭信息,其中 附加頭信息"Upgrade: WebSocket"
二、WebSocket API
3.1 創建 WebSocket 對象。
var Socket = new WebSocket(url, [protocol] );
3.2 WebSocket 的屬性
屬性 | 描述 |
Socket.readyState |
只讀屬性 readyState
|
Socket.bufferedAmount |
只讀屬性 bufferedAmount 已被 send() 放入正在隊列中等待傳輸,但是還沒有發出的 UTF-8 文本字節數。 |
3.3 WebSocket 事件
事件 | 事件處理程序 | 描述 |
---|---|---|
open | Socket.onopen | 連接建立時觸發 |
message | Socket.onmessage | 客戶端接收服務端數據時觸發 |
error | Socket.onerror | 通信發生錯誤時觸發 |
close | Socket.onclose | 連接關閉時觸發 |
3.4 WebSocket 方法
方法 | 描述 |
---|---|
Socket.send() |
使用連接發送數據 |
Socket.close() |
關閉連接 |
三、WebSocket簡單使用
var ws = new WebSocket("ws://localhost:8080"); ws.onopen = function() { // Web Socket 已連接上,使用 send() 方法發送數據 ws.send("發送數據"); alert("數據發送中..."); }; ws.onmessage = function (evt) { var received_msg = evt.data; alert("數據已接收..."); }; ws.onclose = function() { // 關閉 websocket alert("連接已關閉..."); };
參考文章:
1、http://www.runoob.com/html/html5-websocket.html
2、http://www.ruanyifeng.com/blog/2017/05/websocket.html
WebSocket簡介