欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue通過WebSocket建立長連接的實現(xiàn)代碼

 更新時間:2019年11月05日 08:39:05   作者:夕顏非顏  
這篇文章主要介紹了Vue通過WebSocket建立長連接的實現(xiàn)代碼,文中給出了問題及解決方案,需要的朋友可以參考下

使用場景:

  在項目開發(fā)中,后端需要處理一連串的邏輯,或者等待第三方的數(shù)據(jù)返回來進行處理之后在返回給前端,可能時間會很長,而且前端也不知道后端什么時候能處理好(時間長的話會達到10分鐘左右),如果采用普通的HTTP連接,前后端無法一直保持聯(lián)系,麻煩的時候可能還需要采用輪詢的機制,所以使用WebSocket連接效果還是比較好的。

使用時間:

  在界面加載完之后,建上WebSocket連接,此時前端還可以發(fā)送普通的HTTP的請求,等到后端處理完之后,通過建立的WebSocket連接返給前端,前端根據(jù)返回的數(shù)據(jù)進行對應(yīng)的操作。

代碼展示:

<template>
</template>
<script>
export default {
 data() {
  return{
   // 用戶Id
   userId:'',
   appid:'',
   // 事件類型
   type:'',
   msg:'',
   wsUrl:''
  }  
 },
 methods: {
  //初始化weosocket
  initWebSocket() {
   if (typeof WebSocket === "undefined") {
    alert("您的瀏覽器不支持WebSocket");
    return false;
   }
   const wsuri = 'ws://(后端WebSocket地址)/websocket/' + this.userId + '/' + this.appid // websocket地址
   this.websock = new WebSocket(wsuri);
   this.websock.onopen = this.websocketonopen;
   this.websock.onmessage = this.websocketonmessage;
   this.websock.onerror = this.websocketonerror;
   this.websock.onclose = this.websocketclose;
  },
  //連接成功
  websocketonopen() {
   console.log("WebSocket連接成功");
   // 添加心跳檢測,每30秒發(fā)一次數(shù)據(jù),防止連接斷開(這跟服務(wù)器的設(shè)置有關(guān),如果服務(wù)器沒有設(shè)置每隔多長時間不發(fā)消息斷開,可以不進行心跳設(shè)置)
   let self = this;
   this.timer = setInterval(() => {
    try {
     self.websock.send('test')
     console.log('發(fā)送消息');
    }catch(err){
     console.log('斷開了:' + err);
     self.connection()
    }
   }, 30000)
  },
  //接收后端返回的數(shù)據(jù),可以根據(jù)需要進行處理
  websocketonmessage(e) {
   var vm = this;
   let data1Json = JSON.parse(e.data);
   console.log(data1Json);
  },
  //連接建立失敗重連
  websocketonerror(e) {
   console.log(`連接失敗的信息:`, e);
   this.initWebSocket(); // 連接失敗后嘗試重新連接
  },
  //關(guān)閉連接
  websocketclose(e) {
   console.log("斷開連接", e);
  }
 },
 created() {
  if (this.websock) {
   this.websock.close(); // 關(guān)閉websocket連接
  }
  this.initWebSocket();
 },
 destroyed() {
  //頁面銷毀時關(guān)閉ws連接
  if (this.websock) {
   this.websock.close(); // 關(guān)閉websocket
  }
 }
};
</script>

問題回顧:

  在實際使用的時候遇到的問題:有的時候頁面鏈接還沒有建立上,但是后端已經(jīng)把數(shù)據(jù)都處理好了,這個時候推給前端,前端接收不到。

解決方案:

  1)簡單的方法:讓后端延遲幾秒再推

  優(yōu)勢:簡單

  劣勢:降低了性能

  2)優(yōu)化之后的方法:使用Redis保存用戶的登錄狀態(tài),緩存這個用戶的數(shù)據(jù),等到建立連接之后再推,推完就清空Redis

總結(jié)

以上所述是小編給大家介紹的Vue通過WebSocket建立長連接的實現(xiàn)代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

最新評論