Vue 2 中 WebSocket 模块实现与应用(包含心跳检测、自动重连)




<template>
  <div>
    <!-- WebSocket 状态显示 -->
    <p>WebSocket 状态: {{ wsStatus }}</p>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      wsStatus: '连接中',
      ws: null,
      lockReconnect: false, // 防止重复连接
      timeout: 10000, // 心跳超时时间
      timeoutObj: null, // 心跳超时对象
      serverTimeoutObj: null // 服务器心跳超时对象
    };
  },
  created() {
    this.initWebSocket();
  },
  methods: {
    initWebSocket() {
      // 初始化WebSocket
      this.ws = new WebSocket('ws://your-websocket-server');
 
      this.ws.onopen = this.onOpen;
      this.ws.onmessage = this.onMessage;
      this.ws.onclose = this.onClose;
      this.ws.onerror = this.onError;
 
      // 心跳检测
      this.timeoutObj && clearTimeout(this.timeoutObj);
      this.serverTimeoutObj && clearTimeout(this.serverTimeoutObj);
      this.startHeartBeat();
    },
    onOpen(event) {
      this.wsStatus = '已连接';
      // ... 其他操作
    },
    onMessage(event) {
      // 处理消息
      // ...
    },
    onClose(event) {
      this.wsStatus = '已关闭';
      // ... 其他操作
    },
    onError(event) {
      this.wsStatus = '发生错误';
      // ... 其他操作
    },
    reconnect() {
      if (this.lockReconnect) return;
      this.lockReconnect = true;
      // 没有连接上会一直重连,设置定时器防止过多重连
      this.timeoutObj && clearTimeout(this.timeoutObj);
      this.timeoutObj = setTimeout(() => {
        this.initWebSocket();
        this.lockReconnect = false;
      }, 2000);
    },
    startHeartBeat() {
      this.serverTimeoutObj && clearTimeout(this.serverTimeoutObj);
      this.serverTimeoutObj = setTimeout(() => {
        // 发送心跳,服务器端如果10秒内未收到心跳,关闭连接
        this.ws.send('heartbeat');
        this.startHeartBeat();
      }, 10000);
    }
  },
  beforeDestroy() {
    this.ws.close(); // 关闭WebSocket连接
  }
};
</script>

这段代码展示了如何在Vue 2中实现一个包含心跳检测和自动重连的WebSocket模块。它使用了WebSocket实例的各种生命周期事件,并通过计时器实现了心跳的发送和检测机制。当WebSocket连接关闭时,它会尝试重新连接,并且使用了锁的机制防止过度的重连尝试。

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日