首页 > 其他分享 >在vue中使用websocket

在vue中使用websocket

时间:2023-04-28 15:11:55浏览次数:36  
标签:vue websocket url alert window ws 使用 config

封装

根据项目的目录结构,在相应的文件夹下创建一个js文件,用来封装一个websocket类,假如项目中用到js的地方很多,最好把文件放在全局公共文件夹中;

export class WS{

  constructor(config) {

    this.ws = null;

    this.url = null;

    this.config = config;

    this.socketLink(config)

  }

 

  socketLink(config) {

    // console.log(config);

    this.url = config.url;

    this.createWebSocket(this.url);

  }

  

  createWebSocket(url) {

    try {

      if ('WebSocket' in window) {

        this.ws = new WebSocket(url, 'echo-protocol');

      } else if ('MozWebSocket' in window) {

        this.ws = new MozWebSocket(url, 'echo-protocol');

      } else {

        alert("您的浏览器不支持websocket")

      }

      this.initWebSocket();

    } catch (e) {

      // this.reconnect(url);

      console.log(e);

    }

  }

 

  initWebSocket() {

    this.ws.onclose = () =>{
    
      window.alert("websocket连接关闭!")

    };

    this.ws.onerror = () => {

      window.alert("websocket连接错误!")

    };

    this.ws.onopen =  () => {

      window.alert(this.config.url +  '连接成功')

    };

    this.ws.onmessage = (event) => {

      if(event.data){

        this.config.getMsg(event.data)

      }

    };

  }
  
  //如果需要向服务器发送消息,可以通过调用这个函数实现
  sendWebSocket (agentData) {

    // 添加状态判断,当为OPEN时,发送消息

    if (this.ws.readyState === this.ws.OPEN) { // 1

      let params = JSON.stringify(agentData)

    }else if (this.ws.readyState === this.ws.CLOSED) { // 3
      
      window.alert('websocket连接异常!')

    }else{

      window.alert("not OPEN")

    }

  }

 //如果有重复连接的需要可以加个定时器,在连接失败时再次连接

   reconnect(url) {

    setTimeout(()=> {

      this.createWebSocket(url);

    }, 2000);

  }

}

使用

在需要创建websocket连接的地方引入这类,并初始化(这里是vue3)

import {WS} from '@/config/websocket/websocket.js' 
const socketInstance = ref({})
//websocket配置
const config = {
  url:'http://xxx',
  getMsg: (val) => {
    //接收到返回的message
    const resInfo = JSON.parse(val)
    
    //to do ...

    }
}

//发送消息msg
socketInstance.sendWebSocket(msg)

标签:vue,websocket,url,alert,window,ws,使用,config
From: https://www.cnblogs.com/rain111/p/17362260.html

相关文章

  • vue 使用腾讯云 cos存储 上传
    参考文档:https://blog.csdn.net/qq_34170840/article/details/1245203881、页面部分点击查看代码<inputref="fileRef"title=""type='file'name="file"multipleclass="file-input"@change="uploadStart......
  • 使用Addressable更好的管理内存
    你好,我是郑洪智,你可以叫我大智。我正在带小新学Unity。洪流学堂公众号回复addr,可以下载Addressable中文手册,更有视频教程哦~小新:“智哥,Assetbundle我只是大概学了一下,但是没咋用过。你说不用它就会有内存问题?”大智:“咱们来一起做个测试吧。对于工程里的资源,一般有三种方式加载实例......
  • vim使用替换功能简介
    VIM中常用的替换模式总结。1,简单替换表达式替换命令可以在全文中用一个单词替换另一个单词::%s/four/4/g“%”范围前缀表示在所有行中执行替换。最后的“g”标记表示替换行中的所有匹配点。如果仅仅对当前行进行操作,那么只要去掉%即可如果你有一个象“thirtyfour”......
  • IDEA从零到精通(21)之使用Maven clean发生错误Process terminated
    IDEA从零到精通(21)之使用Mavenclean发生错误Processterminated原文链接:https://blog.csdn.net/dkm123456/article/details/121871870文章目录作者简介引言导航热门专栏推荐错误描述解决方案:再次clean小结导航热门专栏推荐作者简介作者名:编程界明世隐简介:CSDN博客......
  • 老杜2023最新Vue实战精讲(五)Vuex
    动力节点老杜全新版Vue教程笔记分享给大家学习の地止:https://www.bilibili.com/video/BV17h41137i4视频教程从Vue2开始讲解,一步一个案例,知识点由浅入深,然后很自然的过度到Vue3版本。Vue3是目前企业中使用最多的一个版本。视频中会把每一个Vue的知识点讲解的非常通透,不但举例......
  • vuex持久化
    1、使用场景vuex刷新之后数据会消失2、使用方法(1)结构1点击查看代码import{createStore}from"vuex"importstatefrom'./state'importmutationsfrom'./mutations'importactionsfrom'./actions'import*asgettersfrom'./getter......
  • 【软件工具使用问题】gitlab中md文件如何显示换行
    前言 解决方法:在需要换行的文本后面,多加两个空格就可以。 参考1. GitHub中README.md如何换行_newnwee的博客-CSDN博客;完......
  • 【软件工具使用】wandb介绍
    前言  参考1.wandb知乎教程;2.wandb_github;完......
  • 当进入conda环境以后最好使用conda install来安装python包
    如果您已经进入了一个conda环境,那么建议使用condainstall来安装Python包。这是因为conda是Anaconda提供的软件包管理工具,它可以帮助您安装和管理您所需的软件包,同时保证这些软件包与您当前的conda环境兼容。与此不同,pip是Python默认的包管理工具,它依赖于操作系统中已安装的Pytho......
  • 老杜Vue实战教程完整版笔记(5)Vuex
    接上篇文章,分享动力节点老杜全新版Vue教程笔记学习の地止:https://www.bilibili.com/video/BV17h41137i45Vuex5.1vuex概述vuex是实现数据集中式状态管理的插件。数据由vuex统一管理。其它组件都去使用vuex中的数据。只要有其中一个组件去修改了这个共享的数据,其它组件会同......