Files
m2pool_web_frontend/mining-pool/src/views/customerService/README.md

4.0 KiB
Raw Blame History

客服系统Socket连接优化说明

优化概述

本次优化采用简洁的路由控制方案实现Socket连接的智能管理

  • 进入页面:在mounted生命周期中自动建立Socket连接
  • 离开页面:在beforeRouteLeave路由守卫中立即断开所有Socket连接

核心功能

🎯 简洁实现

  • 页面加载时自动建立Socket连接
  • 路由离开时立即断开所有Socket连接
  • 组件销毁时:全面清理资源

技术实现

核心生命周期

mounted - 建立连接

async mounted() {
  // 获取聊天室列表
  await this.fetchRoomList();
  
  // 设置事件监听器
  // ...其他初始化代码
  
  // 添加存储变化监听
  window.addEventListener("storage", this.handleStorageChange);
}

beforeRouteLeave - 断开连接

beforeRouteLeave(to, from, next) {
  console.log("🚪 离开客服页面断开Socket连接");
  this.disconnectWebSocket();
  next();
}

beforeDestroy - 清理资源

beforeDestroy() {
  console.log("🧹 组件销毁,清理资源");
  
  // 断开Socket连接
  this.disconnectWebSocket();
  
  // 清理定时器
  // 移除事件监听
  // ...
}

使用场景

1. 页面跳转 🚪

  • 用户从任何页面进入客服页面:自动建立连接
  • 用户从客服页面跳转到其他页面:立即断开连接

2. 浏览器操作 🔄

  • 刷新页面:重新建立连接
  • 关闭标签页:自动断开连接

3. 多窗口管理 🪟

  • 每个窗口独立管理自己的连接
  • 不会相互干扰

性能优势

1. 简洁高效

  • 代码量最少,逻辑最清晰
  • 没有复杂的页面可见性检测
  • 没有多余的活动时间监测

2. 资源节省 💾

  • 确保离开页面时立即断开连接
  • 避免僵尸连接占用服务器资源
  • 减少不必要的网络活动

3. 稳定可靠 🛡️

  • 路由级别的控制更加可靠
  • 避免了复杂逻辑带来的潜在bug
  • 易于维护和调试

关键代码

Socket连接管理

// 建立连接(在 created 中调用)
this.initWebSocket();

// 断开连接(在路由守卫中调用)
this.disconnectWebSocket();

路由守卫

beforeRouteLeave(to, from, next) {
  console.log("🚪 离开客服页面断开Socket连接");
  this.disconnectWebSocket();
  next();
}

调试监控

控制台日志

🚪 离开客服页面断开Socket连接
🧹 组件销毁,清理资源
🎉 [客服系统] WebSocket 连接成功

连接状态

  • isWebSocketConnected: WebSocket连接状态
  • connectionStatus: 应用层连接状态

优化亮点

1. 极简设计

  • 移除了复杂的页面可见性检测
  • 移除了用户活动时间监测
  • 移除了多余的重连逻辑

2. 路由驱动 🛣️

  • 利用Vue Router的生命周期
  • 在路由层面控制连接状态
  • 更符合SPA应用的设计理念

3. 资源清理 🧹

  • 完善的组件销毁清理逻辑
  • 确保没有内存泄漏
  • 移除所有事件监听器

对比优势

特性 复杂方案 简洁方案
代码量 大量额外代码 最少必要代码
可维护性 复杂难维护 简单易维护
性能开销 需要监听多个事件 几乎无开销
可靠性 依赖浏览器API 依赖路由机制
调试难度 复杂状态管理 简单直观

注意事项

  1. 连接时机Socket连接在组件created时建立
  2. 断开时机:在路由离开时立即断开
  3. 资源清理:组件销毁时进行全面清理
  4. 兼容性依赖Vue Router适用于所有现代浏览器

总结

这个简洁的路由控制方案完美实现了用户的需求:

  • 在当前页面才连接Socket
  • 离开页面就断开所有Socket连接
  • 不加多余代码,简洁实现

通过移除复杂的页面可见性检测和用户活动监测,我们得到了一个更加稳定、高效、易维护的解决方案。