SocketIO架构说明.md 3.2 KB

SocketIO 模块架构说明(鸿蒙端)

📋 架构调整

调整前(方案1:分离)

base-common/socketio(业务层)
  └─ SocketIOManager(使用反射调用 capability-socketio)
      ↓ 反射调用
capability-socketio(能力层)
  └─ SocketIORepository(具体实现)

问题:

  • ❌ 使用反射,性能差,类型不安全
  • ❌ 代码分散在两个模块
  • ❌ 违反依赖方向(业务层通过反射绕过依赖)

调整后(方案2:全部放在能力层)✅

capability-socketio(能力层)
  ├─ SocketIORepository(具体实现)
  └─ SocketIOManager(生命周期管理,直接调用 SocketIORepository)
      ↓ 回调函数
entry(应用层)
  └─ AppInitializer(通过直接调用 SocketIOManager,传递回调函数)

优势:

  • ✅ 代码集中在能力层
  • ✅ 直接依赖,类型安全
  • ✅ 符合依赖方向(能力层自包含)
  • ✅ 无反射开销(能力层内部)

🔄 依赖关系

正确的依赖方向

entry(应用层)
    ↓ 直接依赖
capability-socketio(能力层)
    ↓ 直接依赖
base-core(基础设施层)

capability-socketio 的依赖

{
  "dependencies": {
    "@xdz/base-core": "file:../base-core",
    "@kit.AbilityKit": "^1.0.0"
  }
}

关键点:

  • ✅ capability-socketio 不依赖 base-common
  • ✅ SocketIOManager 使用 ILog(base-core)而不是 LogHelper(base-common)
  • ✅ SocketIOManager 通过回调函数接收登录状态和 Token 刷新逻辑

📝 SocketIOManager 设计

位置

capability-socketio/src/main/ets/socketio/manager/SocketIOManager.ets

职责

  1. 生命周期管理

    • 监听应用前后台切换(通过 Ability 生命周期)
    • App 进入前台时自动检查并重连 SocketIO
  2. 自动重连

    • 检查连接状态,如果断开则自动重连
    • Token 过期时自动刷新并重连
  3. 回调函数

    • isLoggedInProvider: 登录状态检查回调(由应用层设置)
    • refreshTokenProvider: Token 刷新回调(由应用层设置)

使用方式

// 在 AppInitializer 中初始化
import { SocketIOManager } from '@xdz/capability-socketio';
import { AuthManager } from '@xdz/base-common';

// 1. 先调用 init(注册生命周期监听)
SocketIOManager.init(context);

// 2. 设置回调函数(直接设置属性,简单直接)
SocketIOManager.isLoggedInProvider = () => {
  return AuthManager.getInstance().isLoggedIn();
};

SocketIOManager.refreshTokenProvider = async () => {
  return await AuthManager.getInstance().refreshTokenIfNeeded();
};

✅ 总结

capability-socketio

  • SocketIO 的具体实现
  • SocketIO 的生命周期管理
  • 提供连接、发送、接收等基础能力
  • 提供自动重连、Token 刷新等业务逻辑

entry

  • 应用初始化逻辑
  • 协调所有层的初始化
  • 设置 SocketIOManager 的回调函数

两者关系:

  • capability-socketio 提供能力和管理
  • entry 负责组装和配置
  • 通过回调函数实现解耦

文档版本: v2.0
更新时间: 2024-12
对应 Android 版本: capability-socketio/架构调整说明.md