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

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.kler.cn/a/562201.html

相关文章:

  • Linux 内核 RDMA CM 模块分析:drivers/infiniband/core/cma.c
  • C++之string类的模拟实现(超详细)
  • 计算机视觉算法实战——文档扫描与 OCR(主页有源码)
  • 电脑软件:推荐一款非常强大的视频音频转换剪辑工具FFmpeg Batch AV Converter V3.12
  • matlab学习之路
  • Socket编程基础
  • Web核心、HTTP
  • Python爬虫实战:自动抓取微博热搜并根据帖子生成词云图
  • halcon三维点云数据处理(二十七)remove_bin_for_3d_object_localization
  • 【Linux】34.封装 UdpSocket(1)
  • LeetCode 热题 100 73. 矩阵置零
  • 【PyTorch][chapter 28][李宏毅深度学习][Diffusion Model-3]
  • Java使用EasyExcel实现异步导出
  • html - 手工添加上次阅读的位置, 方便下次阅读
  • 大语言模型安全测试:WDTA 标准下的全面解读与实践展望
  • 深入理解Redis:数据类型、事务机制及其应用场景
  • 前端项目配置 Nginx 全攻略
  • redis和mysqle辨析
  • 大语言模型的不足与研究热点
  • 2.部署kafka:9092