一、首先我們先了解一下websocket的使用:
1、創建websocket
const ws = new WebSocket("ws://192.168.31.136:9998/ws");
2、已連接上,使用 send() 方法發送用戶信息給后端
ws.onopen = ()=>{
ws.send("發送數據");
}
3、收到消息
ws.onmessage=(evt)=>{
var received_msg = evt.data;
}
4、連接斷開
ws.onclose=(evt)=>{
console.log(evt)
}
二、vue項目使用websocket思路.
1、登錄成功后連接websocket。
為了防止刷新頁面后websocket會斷開連接,我們在main.js中添加如下代碼。
import Vue from "vue"; import App from "./App.vue"; import router from "./router"; import store from "./store"; import { initWebSocket } from "./plugins/socket"; try { const userInfo = JSON.parse(localStorage.getItem("userInfo")); if (userInfo) { store.commit("setUserInfo", userInfo); initWebSocket(); } } catch (error) { console.log(error); } Vue.config.productionTip = false; new Vue({ router, store, render: h => h(App) }).$mount("#app");
2、收到消息后保存到vuex state狀態中
3、聊天頁面監聽vuex state數據。
4、push進聊天記錄數組。
以下是我簡單封裝的websocket方法:
import vuex from "../store"; let ws = null; export function initWebSocket() { let userInfo = vuex.state.userInfo; // 創建websocket ws = new WebSocket("ws://192.168.31.141:5566/ws"); // 連接成功發送用戶信息給后端 ws.onopen = function() { let msg = { token: userInfo.token, type: 1, msgType: 0, sendUserId: userInfo.id }; ws.send(JSON.stringify(msg)); }; // 收到消息保存到vuex ws.onmessage = function(event) { vuex.commit("setMsg", event.data); console.log(event); }; // 斷開連接后進行重連 ws.onclose = function(event) { console.log(event); let userInfo = vuex.state.userInfo; if (userInfo) { setTimeout(() => { initWebSocket(); }, 5000); } }; } // 發送消息(可以引入使用,也可以掛在到Vue原型上面使用) export function webSocketSend(data) { if (ws.readyState === 1) { ws.send(JSON.stringify(data)); } }
希望能幫助到大家!