websocket控制全局接收发送消息

440 阅读2分钟

websocket控制全局接收发送消息

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

起因:因为公司要新做一个教育实训平台,有三种角色:管理员端(一个学校只有一个账号)、教师端(这个专业下需要使用此平台的所有老师)、学生端(这个专业下需要使用此平台的所有学生)。必须在指定的ip段(可配置实验室网段)内上课,而且需要控制人数和在线时间,因为决定用websocket来控制。

创建挂载websocket公共的/global.js文件

export default {
    ws: {},
    setWs: function(newWs) {
        this.ws = newWs
    }
}

创建websocker的js文件

import vue from "vue";
function getSocket() {
    let websocket;
    if (typeof (WebSocket) === 'undefined') {
      console.log('您的浏览器不支持WebSocket');
    } else {
      console.log('您的浏览器支持WebSocket');
      websocket = new WebSocket(连接websocket的请求);
      vue.global.setWs(websocket);//此步是把websocket挂载到全局
      //已连接
      websocket.onopen = function() {
        console.log("that.websocket: connection is opened");
      };
      //已关闭
      websocket.onclose = function() {
        console.log("that.websocket: connection is closed");
        //一旦连接关闭(超过人数或者超过登录时长)这里可以写退出登录的方法
      };
      //websocket的心跳
      websocket.onheartbeat = function() {
        console.log("that.websocket: connection heartbeat...");
      };
      //后端传输的消息
      websocket.onmessage = function(e) {
        console.log(e)
      };
    }
}
export {
  getSocket
};

把global.js引入到main.js

import global from '../src/js/global.js'
Vue.prototype.global = global
Vue.global = Vue.prototype.global

把准备工作做好后就可以在登录页面去引用getSocket()来创建websocket。 在需要接收消息的页面写以下的方法

// 发送和接收消息
  handdleMsg() {
    let that  = this;
    //接收消息
    (vue as any).global.ws.onmessage = function(res) {
      //接收各种不同的消息来执行不同的方法
    };
    //发送消息
    (vue as any).global.ws.send('心跳检测');
  }

之后就又发现了一个新的问题,因为用户会刷新页面,因为websocket是登录之后连接的,刷新之后就断开了连接,因此可以通过监测页面刷新后重新连接websocket。 在App.vue里重新连接

 import { getSocket } from './js/socket.js';
 ...
created(){
    getSocket()
  }

以上就是所有的过程了。