当前位置: 首页 > news >正文

vue2 ruoyi websocket轮询

文章目录

  • 前言
  • 一、websocket和心跳是什么?
  • 二、使用步骤
    • 1.
    • 2.监听变化
    • 3.关闭
  • 总结


前言

websocket,实现与后端通讯,使用心跳机制,断联自动恢复。


一、websocket和心跳是什么?

  1. WebSocket
    WebSocket 是一种网络通信协议,允许客户端和服务器之间进行全双工通信(即双方可以同时发送和接收数据)。它通过一次 HTTP 握手建立连接,之后保持长连接,适合实时性要求高的场景。

  2. 心跳机制(Heartbeat)
    心跳机制是一种用于检测连接是否存活的机制。客户端和服务器通过定期发送小型数据包(称为“心跳包”)来确认对方是否在线。
    实现方式:
    客户端和服务器约定一个时间间隔(如 30 秒)。
    客户端定期向服务器发送心跳包(通常是一个小型数据包,如 ping)。
    服务器收到心跳包后回复一个响应包(如 pong)。
    如果一方在指定时间内未收到心跳包或响应包,则认为连接已断开。

二、使用步骤

1.

代码如下(示例):

  created() {
    const self = this; // 在这里保存组件实例的引用
    this.join();
    clearInterval(this.setIntervalId);
    this.setIntervalId=setInterval(()=>{
      // 使用 setTimeout 来创建延迟
        this.heartbeatTest();
    },3000)
  },
		//开始链结
   join() {
      const wsuri = this.url;//url地址wss://127.0.0.1:1234/websocket/message
      const self = this;
      this.ws = new WebSocket(wsuri);
      this.ws.onopen = function (event) {
        self.text_state = self.text_state + "已经打开连接!" + "\n";
        clearTimeout(this.heartSetTimeOutId)
      };
      this.ws.onmessage = function (event) {
        self.waitingResponse = true;
        self.text_content = event.data;
        self.message = event.data;
        if (self.text_content == "ok"){
          self.sendHandle("停机维护")
        }
      };
      this.ws.onclose = (event) => {
        // 处理连接关闭事件,例如重新连接或执行其他操作
        if (this.reConnectNum < 10){
       this.heartSetTimeOutId = setTimeout(() => {
          this.join();
          this.reConnectNum++;
        }, 20000); // 根据需要调整延迟的持续时间(以毫秒为单位)
        }
      };
      this.ws.onerror = (error) => {
        console.error('WebSocket error: ', error);
        // 处理WebSocket错误事件
      };
    },
    exit() {
      if (this.ws) {
        clearInterval(this.setIntervalId);
        this.ws = null;
      }
    },
    heartbeatTest(){
      if (this.ws.readyState !== WebSocket.CLOSED){
        this.sendMessage = "heartCheck";
        this.ws.send(this.sendMessage);
      }
    },
    close() {
      const self = this;
      if (this.ws && this.ws.OPEN){
        this.ws.onclose = function (event) {
          self.text_state = self.text_state + "已经关闭连接!" + "\n";
        };
      }

    },

2.监听变化


  watch:{
    text_content:{
        deep:true,
      handler(n,o){
            if (n.indexOf('opera') >-1){
              let json = JSON.parse(n);
              this.noticeShowFlag = json.maintainStatus;
              this.noticeShowMsg = "";
              if (this.noticeShowFlag){
                this.noticeShowMsg = json.expirseTime+"操作!!";
              }
            }
      }
    }
  },

3.关闭

  beforeDestroy() {
    //页面销毁时关闭长连接
    this.close();
    this.exit();
  },

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

http://www.dtcms.com/a/38003.html

相关文章:

  • Ansible-03 docker安装-基于centos
  • 使用Python爬虫获取孔夫子旧书网已售商品数据:调用item_search_sold接口
  • SmartMediakit之音视频直播技术的极致体验与广泛应用
  • 安装TortoiseGit时,显示需要安装驱动?!
  • kafka的ACL配置的sasl.kerberos.principal.to.local.rules配置解释
  • JavaScript的BOM编程
  • 前端页面什么是全屏嵌入/什么是局部嵌入
  • 费曼学习法7 - NumPy 数组的 “变形术”:形状变换与索引切片 (基础篇)
  • 当PHP遇上区块链:一场奇妙的技术之旅
  • 基于SSA-KELM-Adaboost(麻雀搜索优化的极限学习机自适应提升算法)的多输入单输出回归预测【MATLAB】
  • 如何用python将pdf转为text并提取其中的图片
  • js基础语法
  • 前端监控与埋点
  • Three.js 入门(辅助、位移、父子关系、缩放旋转、响应式布局)
  • VC++零基础入门之系列教程 【附录E MFC快速参考指南】
  • 20250212:ZLKMedia 推流
  • Visual Studio Code 远程开发方法
  • C#从入门到精通(35)—如何防止winform程序因为误操作被关闭
  • 為什麼使用不限量動態住宅IP採集數據?
  • 2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷(四)
  • Redis详解
  • 为AI聊天工具添加一个知识系统 之122 详细设计之63 实体范畴论和神经元元模型:命名法函子
  • MySQL 入门“鸡”础
  • 如何查看PostgreSQL的版本
  • Java常见设计模式(中):结构型模式
  • 375_C++_cloud手机推送,添加人脸告警信息到任务队列中,UploadAlarmPush是典型的工厂模式应用,为什么使用工厂模式完成这部分代码
  • Python入门12:面向对象的三大特征与高级特性详解
  • 视频字幕识别和翻译
  • Python爬虫系列教程之第十六篇:代理IP池构建与管理策略
  • Dify安装教程:Linux系统本地化安装部署Dify详细教程