首页 > 其他分享 >使用sockjs-client 和 @stomp/stompjs 创建socket,断线重连机制

使用sockjs-client 和 @stomp/stompjs 创建socket,断线重连机制

时间:2023-05-18 18:33:24浏览次数:44  
标签:stompjs sockjs console socket stompClient client MQ log

import SockClient from 'sockjs-client'
const Stomp = require('@stomp/stompjs')


// 方法
   createStompClient() {
      const that = this
      const ws = new SockClient(`/socket/api/socket-mq?access_token=${getToken()}`)
      this.stompClient = Stomp.Stomp.over(ws)

      // 订阅连接完成事件
      this.stompClient.connect(this.configData.mqUserName, this.configData.mqPassword, () => {
        console.log('【MQ】:on_connect')
        that.clientOnConnectHandle()
      },(err) => {
        console.log('【MQ】:on_error', err)
      }, (val) => {
        console.log('【MQ】:on_close', val)
        that.clientOnDisconnectHandle()
      })

      // 订阅连接断开事件
      // this.client.debug = this.clientOnDebugHandle
      // this.client.onDisconnect = this.clientOnDisconnectHandle
      // this.client.onWebSocketError = this.clientOnWebSocketErrorHandle
      // this.client.onStompError = this.clientOnStompErrorHandle

    },

    // socket 已经连接,发送订阅
    clientOnConnectHandle() {
      this.subscription = this.stompClient.subscribe(`/exchange/ExEventAnalysis/EventAgentInfo.${this.agentConfig.agentId.slice(0,6)}.${this.agentConfig.agentId}`,(msg)=>{
        let msgTool = JSON.parse(msg.body)
        if (msgTool.messageID === 'EventAgentInfo') {
          this.$store.commit('commitData', {
            name: 'staticObj',
            data: msgTool
          })
        }
      })
    },

    // 订阅连接断开事件
    clientOnDisconnectHandle() {
      const that = this
      console.log('【MQ】:连接断开!');
      that.closeStompClient();  // 先关闭之前的socket连接
      this.reload = 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对象
      }
    },

    clientOnDebugHandle(str) {
      console.log(`【MQ】:${str}`)
    },
    
    clientOnWebSocketErrorHandle(err) {
      console.log(`【MQ - WebSocket异常】:${err}`)
    },

    clientOnStompErrorHandle(receipt) {
      console.log(`【MQ - Stomp异常】:${receipt}`)
    },

标签:stompjs,sockjs,console,socket,stompClient,client,MQ,log
From: https://www.cnblogs.com/DL-CODER/p/17412985.html

相关文章

  • 传动带料箱输送线程序,有合流和分拣,个人认为精华部分是WCS和PLC的Socket接口和分拣控制
    传动带料箱输送线程序,有合流和分拣,个人认为精华部分是WCS和PLC的Socket接口和分拣控制程序。提供设备布局图和电气图纸以及博途V16程序。程序源自欧企,无加密,外企程序还是比较美观的,程序仅供学习参考,不讲解,能从中学到多少看自己努力。硬件配置:PLC:1516F-3PN/DP,1212C等HMI:TP1200C......
  • Websocket
    websocket是什么websocket与http一样都是OSI模型中应用层的协议,都是基于TCP协议来传输数据的,我们把这些更高级的协议理解成对TCP的封装。socket与websocket的关系socket与websocket的关系:就是毫无关系。socket并不是一种协议,而是一个抽象层,将物理层、数据链路层、网络层与传输......
  • .NET + SignalR 的反向代理 websocket/http 数据隧道
    开源项目TuToDataTunnel:https://github.com/viordash/TuToDataTunnel,这个项目可以满足以下几个需求:使用一个公网IP地址和一个tcp端口,默认端口为80http。Websocket或http隧道传输、性能或可访问性。理想情况下,将自动选择最佳可用交换协议。同时通过隧道传输多个TCP和u......
  • .Net Core 实现WebSocket Server 的另外三种方式
    回顾之前已经写过关于《WebSocket原生socket实现》和《.NetCoreWebSocket服务端与客户端完整示例》以及《基于.NetTcpListener实现WebSocketServer通讯》。其中除了《.NetCoreWebSocket服务端与客户端完整示例》外,都是基于自己对Websocket协议的实现,这种实现在生产环境......
  • 用QWebsocket时关于信号槽的一个坑
    https://blog.csdn.net/zerolity/article/details/94746977 坑描述:connect(&m_webSocket,&QWebSocket::textMessageReceived,this,&BWebsocket::onTextMessageReceived);1和主机通过websocket通信。接收主机发的指令有时导致重复接收。信号发送者和接受者同一线程。onTe......
  • WebSocket 通信使用
    传送门:https://blog.csdn.net/FTEzreal/article/details/115245562传送门:https://juejin.cn/post/6844904016976035854......
  • 深入理解计算机网络:使用Python和Socket编程实现TCP_IP协议族
    本文将介绍如何使用Python和Socket编程实现TCP/IP协议族。TCP/IP协议族是互联网上使用最广泛的协议族之一,TCP协议和IP协议是其最核心的两个协议。在本文中,我们将分别介绍TCP协议和IP协议的基本原理,并使用Python和Socket编程实现它们。TCP协议TCP协议是一种面向连接的、可靠的传输协......
  • c#高性能服务器源代码,其中包括mvc api服务,http服务,ftp服务,sokect服务,websocket服务,大
    c#高性能服务器源代码,其中包括mvcapi服务,http服务,ftp服务,sokect服务,websocket服务,大文件传输服务。这些服务均抛开iis及第三支持,可写成服务或随软件启动而启动。ID:85320654113922032......
  • Java Socket编程
    一:Socket介绍Socket(中文:套接字)编程是网络常用的编程,我们通过在网络中创建Socket关键字来实现网络间的通信;要想解释清楚Socket,首先要知道TCP,要想知道TCP,那就得对TCP/IP的体系结构以及每一层的大概工作有所了解,那么我们就先来说说TCP/IP的分层。1:ISO/OSI和TCP/IP模型其实......
  • socket
    socketmyphone=socket.socket()不入参默认使用tcp协议myphone.bind(('127.0.0.1',9999))0-65535端口范围,0-1023知名端口myphone.listen()同时能接受链接127.0.0.1本地会换地址,可用做代码功能性测试tcp服务端网络协议实时通信-占用连接,tcp协议延迟......