websockData: [],为获取到的数据
hasConnected: false,是否已连接
1、首先获取到后端给的 websocket 请求地址,可以先对该地址进行测试(websocket在线测试工具)
存放在 config —— index.js
2、创建websock.js文件,放在 store —- module —- websocket.js
import { resolve } from "any-promise"; import store from "@/store"; import config from '@/config'; // import { GetRelationList2 } from "../../api/client"; const wsUrl = process.env.NODE_ENV === 'development' ? config.WebSocketUrl.dev : config.WebSocketUrl.pro export const websocket = { state: { websock: null, // 获取到的数据 websockData: [], websockData1:[], // 是否已连接 hasConnected: false, clients: [] }, mutations: { setConnection(state, websock) { state.websock = websock }, sethasConnected(state, hasConnected) { state.hasConnected = hasConnected; }, setDatas(state, data) { state.clients = data; }, setWebsockData(state, data) { state.websockData.push(data); }, setWebsockData1(state, data) { state.websockData.push(data); } }, //该部分为了获取websocket的相关方法。会发现此处跟mutations 里的写法是类似的,但是,想使用return,需要将相关数据写在getters里面。 getters: { STAFF_UPDATE(state) { return state.websock }, SATFF_DATAS(state) { return state.clients } }, actions: { STAFF_WEBSOCKET({ state, commit }) { return new Promise(async (resolve, reject) => { try { // const wsuri = "ws://192.168.199.171:8009/ws"; // const wsUrl = "ws://192.168.199.203:8920/api/Chat/Connect?nickName=5678929" let connection = new WebSocket(wsUrl); console.log(wsUrl,'0000000000000000000') commit('setConnection', connection); commit('sethasConnected', true); //默认发送UserId关联connectionId //连接 websocket.state.websock.onopen = function () { console.log('连接成功111') websocket.state.websock.send('我已连接成功') } // 接收 服务器返回的数据 websocket.state.websock.onmessage = function (e) { // console.log("服务器返回:" + e.data); //数据 接收 var dataTitle = JSON.parse(e.data).pragma var dataList = JSON.parse(e.data).data if (dataTitle == 'average') { let actions = { // 以下数据为项目中真实用到的数据 temperature: dataList.Temperature,//温度 humidity: dataList.Humidity,//湿度 o2: dataList.O2,//氧气 cO2: dataList.CO2,//二氧化碳 voc: dataList.VOC,//VOC cH2O: dataList.CH2O,//甲醛 pressure: dataList.Pressure,//气压 waterPenetration: dataList.WaterPenetration, //渗水 invade: dataList.Invade, //入侵情况 }; commit('setWebsockData', actions); // 报警信息 } else if(dataTitle == 'tempAlarm') { console.log(JSON.parse(e.data).data,'报警信息') console.log(dataList,'111111111') let alarmInfo = dataList.Result; commit('setWebsockData1', alarmInfo); // 报警条数 } // else if(dataTitle == 'alarmCount') { // // console.log(JSON.parse(e.data).data,'报警条数') // let alarmInfo = dataList.marqueeList; // commit('setWebsockData', alarmInfo); // } // //请求在线终端列表 //store.dispatch("GetRelationList"); } //关闭 websocket.state.websock.onclose = function (e) { websocket.state.websock.close(); // //请求在线终端列表 // store.dispatch("GetRelationList"); } } catch (error) { reject(error) setTimeout(() => this.STAFF_WEBSOCKET(), 5000);//连接失败后自动重连 console.log("链接失败") } }) }, GetRelationList({ state, commit }) { return new Promise((resolve, reject) => { try { // debugger // const prm = GetRelationList2(); // prm.then(res => { // commit("setDatas", res.data.result) // resolve(res.data.result) // }) } catch (error) { reject(error) } }) } } } export default websocket
4、在router — index.js 中打开websocket
5、在页面上的具体使用方法