最近vue項目要做數據實時刷新,折線圖每秒重畫一次,數據每0.5秒刷新一次,說白了就是實時刷新,因為數據量較大,用定時器估計頁面停留一會就會卡死。。。
與后台人員討論過后決定使用h5新增的WebSocket來實現數據實時展示,記錄一下過程以及碰到的問題;
注意:頁面刷新長連接會被關閉,其實進入當前頁面建立長連接的目的就是頁面不用F5刷新,所有數據自動實時刷新,如果還是來回F5大刷頁面那就沒有意義了。。。
ps: 如果實在有這個需求的話,網上貌似有實現刷新頁面長連接不斷的方法,請自行百度。。。。
<template> <div> </div> </template> <script> export default { data() { return { websock: null, } }, created(){ //頁面剛進入時開啟長連接 this.initWebSocket() }, destroyed: function() { //頁面銷毀時關閉長連接 this.websocketclose(); }, methods: { initWebSocket(){ //初始化weosocket const wsuri = process.env.WS_API + "/websocket/threadsocket";//ws地址 this.websock = new WebSocket(wsuri); this.websocket.onopen = this.websocketonopen; this.websocket.onerror = this.websocketonerror; this.websock.onmessage = this.websocketonmessage; this.websock.onclose = this.websocketclose; }, websocketonopen() { console.log("WebSocket連接成功"); }, websocketonerror(e) { //錯誤 console.log("WebSocket連接發生錯誤"); }, websocketonmessage(e){ //數據接收 const redata = JSON.parse(e.data); //注意:長連接我們是后台直接1秒推送一條數據, //但是點擊某個列表時,會發送給后台一個標識,后台根據此標識返回相對應的數據, //這個時候數據就只能從一個出口出,所以讓后台加了一個鍵,例如鍵為1時,是每隔1秒推送的數據,為2時是發送標識后再推送的數據,以作區分 console.log(redata.value); }, websocketsend(agentData){//數據發送 this.websock.send(agentData); }, websocketclose(e){ //關閉 console.log("connection closed (" + e.code + ")"); }, }, } </script>