WebSocket 協議本質上是一個基於 TCP 的協議。 同http協議使用http://開頭同樣,WebSocket協議的URL使用ws://開頭,另外安全的WebSocket協議使用wss://開頭。javascript
首先申請一個 websocket的構造方法構建一個websocket對象,參數是須要鏈接的服務器端的地址。 var Socket = new WebSocket(url, [protocol] ); 以上代碼中的第一個參數 url, 指定鏈接的 URL。第二個參數 protocol 是可選的,指定了可接受的子協議。html
瀏覽器經過JavaScript向服務端發出創建WebSocket鏈接的請求,在WebSocket鏈接創建成功後,客戶端和服務端就能夠經過java
TCP鏈接傳輸數據。由於WebSocket鏈接本質上是TCP鏈接,不須要每次傳輸都帶上重複的頭部數據,因此它的數據傳輸量比輪詢和Comet技術小了不少。jquery
socket 是雙向通信,數據只要渲染到頁面上,後臺有改動的話,頁面會實時更新。web
首先申請一個 websocket的構造方法構建一個websocket對象,參數是須要鏈接的服務器端的地址。 var Socket = new WebSocket(url, [protocol] ); 以上代碼中的第一個參數 url, 指定鏈接的 URL。第二個參數 protocol 是可選的,指定了可接受的子協議。後端
在支持WebSocket的瀏覽器中,在建立socket以後。能夠經過onopen,onmessage,onclose即onerror四個事件實現對socket進行響應。api
參考示例: client 先發起握手請求 服務器端響應 交互數據瀏覽器
<html>
<body>
<div id="main">
<div id="message"></div>
<p style="color: red;" class="content"></p>
<span class="changeme">請把我替換掉</span>
</div>
</body>
</html>
複製代碼
<script type="text/javascript">
$(".changeme").replaceWith("555); var websocket = null; // 判斷當前瀏覽器是否支持webSocket if('websocket' in window) { // 建立一個webSocket 連接,URL:127.0.0.1:8080/realTimeWebSocket/webSocket // 注:後端Server 在模塊realTimeWebSocket下,因此路徑下多了一層realTimeWebSocket websocket = new Websocket("wss://127.0.0.1:8080/realTimeWebSocket/webSocket"); }else { console.log('當前瀏覽器 不支持webSocket') } // 鏈接發生錯誤的回調方法: websocket.onerror = function () { setMessageInnerHTML("鏈接錯誤!"); } // 鏈接成功創建的回調方法 websocket.onopen = function () { setMessageInnerHTML("鏈接成功!"); } // 接收到消息的回調方法,此處添加處理接收消息方法,當前是將接收到的消息顯示在網頁上 websocket.onmessage = function (event) { setMessageInnerHTML(event.data); var detail = event.data; $(".content").html(detail); } // 鏈接關閉的回調方法: websocket.onclose = function () { setMessageInnerHTML("鏈接關不,如需登陸請刷新頁面!"); } // 監聽窗口關閉事件,當窗口關閉時,主動去關閉 websocket 鏈接,防止鏈接還沒斷開就關閉窗口,server 端會拋出異常。 window.onbeforeunload = function () { closeWebSocket(); } // 將消息顯示在網頁上,若是不須要顯示在網頁上則不調用該分支 function setMessageInnerHTML(INNERhtml) { document.getElementById('message').innerHTML + = innerHTML + '<br/>' } </script> 複製代碼
<template>
<div>
<p @click="clickMe()"></p>
</div>
</template>
複製代碼
<script>
export default {
data() {
return {
websocket:''
}
},
mounted() {
this.initWebSocket(); // 調取行情
},
method: {
// 當數據切換時須要從新調取行情,從新調取行情不能直接再初始化websocket,須要從新 send websocket數據,
clickMe() {
this.websocketonsend();
},
// 初始化websocket
initWebSocket() {
const wsuri = 'wss://api.swbei.cn:9501/';
this.websocket = new WebSocket(wsuri);
this.websocket.onopen = this.websocketonsend;
this.websocket.onmessage = this.websocketonmessage;
this.websocket.onclose = this.websocketonclose;
},
websocketonsend(e) {
this.websocket.send();
},
websocketonmessage(e) {
var data = JSON.parse(e.data);
},
websocketonclose(e) {
this.websocket.close();
}
},
// 離開頁面時,關閉websocket
beforeDestroy() {
this.websocketclose();
}
}
</script>
複製代碼