152  
查询码:00001201
websocket前端使用方法
作者: 赵敏 于 2019年12月26日 发布在分类 / 人防组 / 人防前端 下,并于 2019年12月26日 编辑
websocket.js前端使用方法

websocket.js前端使用方法

    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

3、在store —- index.js 中 注册 websocket.js


4、在router — index.js 中打开websocket

5、在页面上的具体使用方法



 推荐知识

 历史版本

修改日期 修改人 备注
2019-12-26 17:58:38[当前版本] 赵敏 websocket.js前端使用方法

  目录
    知识分享平台 -V 4.8.7 -wcp