首页 > 其他分享 >vue中使用sockjs

vue中使用sockjs

时间:2023-08-14 17:33:27浏览次数:37  
标签:vue socket stompClient sockjs 使用 null 连接 subscription

1,安装依赖

npm install sockjs-client --save npm install stompjs --save

2,使用混入封装

在src下创建mixins文件夹,然后创建sockjs.js文件
import SockJS from "sockjs-client";
import Stomp from "stompjs";
export const sockjsMixins = {
  data() {
    return {
      timer: null,
      subscription: null,
    };
  },
  activated() {
    this.createStompClient();
  },
  deactivated() {
    this.disconnect();
    clearInterval(this.timer);
  },
  beforeDestroy: function () {
    // 页面离开时断开连接,清除定时器
    this.disconnect();
    clearInterval(this.timer);
  },
  methods: {
    createStompClient() {
      const self = this;
      // 建立连接对象
      this.socket = new SockJS("http://xxxxxx:8089/ws", null, {
        timeout: 15000,
      }); //连接服务端提供的通信接口,连接以后才可以订阅广播消息和个人消息
      // 获取STOMP子协议的客户端对象
      this.stompClient = Stomp.over(this.socket);
      // 定义客户端的认证信息,按需求配置
      var headers = {
        login: "mylogin",
        "client-id": "my-client-id",
      };
      // 向服务器发起websocket连接
      this.stompClient.connect(
        headers,
        () => {
          //连接成功,发送订阅
          self.clientOnConnectHandle();
        },
        (err) => {
          // 连接发生错误时的处理函数
          console.log(err);
        },
        (val) => {
          // 订阅连接断开事件
          self.clientOnDisconnectHandle();
        }
      );
    },
    // 断开连接
    disconnect() {
      if (this.stompClient != null) {
        this.stompClient.disconnect();
        this.unsubscribe();
        this.stompClient = null;
      }
    },

    // 订阅连接断开事件
    clientOnDisconnectHandle() {
      const that = this;
      that.closeStompClient(); // 先关闭之前的socket连接
      this.timer = window.setTimeout(() => {
        that.createStompClient(); // 再重新创建一个新的socket连接
        window.clearTimeout(that.reload);
      }, 2000);
    },

    // 清除订阅
    unsubscribe() {
      if (this.subscription) {
        this.subscription.unsubscribe();
        this.subscription = null;
      }
    },

    // 关闭之前的socket连接
    closeStompClient() {
      if (this.stompClient) {
        this.unsubscribe();
        this.stompClient = null; // 清空stompClient对象
      }
    },
  },
};

使用sockjs

在需要调用的页面引入sockjs

import { sockjsMixins } from '@/mixins/sockjs.js
  mixins: [sockjsMixins],

在methods中使用

 clientOnConnectHandle() {
      this.subscription = this.stompClient.subscribe("/topic/chat_msg", (msg) => {
        consolel.log(msg.body);
      });
    }

 

 

 

 

 

标签:vue,socket,stompClient,sockjs,使用,null,连接,subscription
From: https://www.cnblogs.com/yuyujuan/p/17629291.html

相关文章

  • [机器学习]对transformer使用padding mask
    注:本文是对GPT4的回答的整理校正补充。在处理序列数据时,由于不同的序列可能具有不同的长度,我们经常需要对较短的序列进行填充(padding)以使它们具有相同的长度。但是,在模型的计算过程中,这些填充值是没有实际意义的,因此我们需要一种方法来确保模型在其计算中忽略这些填充值。这就是p......
  • element表单验证在遍历中的使用
    之前使用表单验证时,都是对象形式,比较简单,直接按官网demo来即可满足要求,官网链接如下: https://element-plus.gitee.io/zh-CN/component/form.html代码如下:<template><div><el-formref="ruleForm":model="myForm":rules="rules"><el-form......
  • vue——qq音乐播放器(1) 左边导航栏样式的实现
    实现结果:左侧导航栏样式实现完整代码:1<template>2<!--左边导航条-->3<divclass="leftnav">4<!--logo-->5<divclass="logo"></div>6<divclass="my-scroll">7......
  • DS CATIA Composer R2023(3D辅助设计软件) HF3中文永久使用
    DSCATIAComposerR2023是一款功能强大的3D辅助设计软件。点击获取DSCATIAComposerR2023 下面是对DSCATIAComposerR2023的800字详细介绍:DSCATIAComposerR2023是由达索系统(DassaultSystèmes)开发的一款专业的3D辅助设计软件。它为用户提供了创新的工具和功能,旨在......
  • 如何在本地给 vue-router4 扩展功能?
    背景前段时间给基于vue3的H5项目做一些优化,该项目经常会有一些页面间的通信,譬如选择地址、乘机人等信息后回填到上一个页面。对于这种简单、频繁的通信,实在不想搞成重火力(eg:pinia)。最好让使用者用完即走,不用操心除业务逻辑之外的任何事情。路由控制页面通信既然是页面间的......
  • 转:Windows下nvm的安装配置及使用 node 版本管理 nvm
    转:Windows下nvm的安装配置及使用 https://www.xjx100.cn/news/114349.html?action=onClick在Linux中,nvm是NodeVersionManager的缩写,它是一个用于管理和切换不同版本的Node.js的工具。使用nvm,您可以轻松地在同一台计算机上安装、切换和管理不同版本的Node.js。以下......
  • ​Python爬虫IP代理池的建立和使用
    写在前面建立Python爬虫IP代理池可以提高爬虫的稳定性和效率,可以有效避免IP被封锁或限制访问等问题。下面是建立Python爬虫IP代理池的详细步骤和代码实现:1.获取代理IP我们可以从一些代理IP网站上获取免费或付费的代理IP,或者自己租用代理IP服务。这里我们以站大爷代理为例,获取......
  • 8.0 Python 使用进程与线程
    python进程与线程是并发编程的两种常见方式。进程是操作系统中的一个基本概念,表示程序在操作系统中的一次执行过程,拥有独立的地址空间、资源、优先级等属性。线程是进程中的一条执行路径,可以看做是轻量级的进程,与同一个进程中的其他线程共享相同的地址空间和资源。线程和进程都......
  • 6.0 Python 使用函数装饰器
    装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为"装饰器"(Decorator),装饰器的功能非常强大,装饰器一般接受一个函数对象作为参数,以对其进行增强,相当于C++中的构造函数,与析构函数。装饰器本质上是一个python函数,它可以让其他函数......
  • [完结8章]程序员的 AI 启蒙课,ChatGPT 辅助开发 Vue3 项目
    点击下载:程序员的AI启蒙课:ChatGPT让你1人顶3人提取码:8zwd Vue是一款用于构建用户界面的JavaScript框,它基于标准的HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,用以帮助开发者高效地开发用户界面。目前,Vue3.0正式版也发布了两年的时间,越......