📘 ECS + 控制器 + UI + 缓存 数据流与交互架构总结文档

本文档总结直播场景中,点赞/弹幕等高频事件流 在 ECS 架构下如何正确处理、同步 UI、写入缓存以及与服务端交互的最佳实践。


🎯 1. 整体架构概述

在现代游戏或直播互动系统中,数据通常分为以下三层:

  1. ECS(运行时数据层):高频、短命、每帧更新的数据
  2. UI(展示数据层):节流后的 UI 可视数据
  3. 缓存/存储层(持久数据层):用户永久数据、配置数据等

这些层之间通过 控制器(Controller) 进行连接与调度。


🧱 2. 三类数据的职责与区别

2.1. ECS 系统数据(运行时状态)

  • 存储位置: ECS 组件(Component)
  • 特点:

    • 高频变化(每秒几十~上千变化)
    • 生命周期短(只在当场景/会话内有效)
    • 不持久化、不写数据库
    • 不直接给 UI 使用
  • 用途:

    • 动画、特效、统计、物理、战斗等运行时代码

例子:

  • 单条点赞事件(LikeEventComponent)
  • 当前累计点赞数(LikeCounterComponent)
  • 弹幕事件(DanmuEventComponent)
  • 角色位置、速度、状态
ECS 是“游戏世界内部”的高速内存,不处理存储和 UI。

2.2. UI 数据(展示层状态)

  • 存储位置: UI 控件、列表数据源、ViewModel
  • 特点:

    • UI 渲染成本高,不能高频更新
    • 只能接受节流后的可视数据
    • 不直接读取 ECS 中的原始高频数据
  • 管理方式:

    • 控制器负责从 ECS “抽取 + 节流 + 转换”为 UI 能用的结果

例子:

  • UI 显示的点赞数
  • 最近 50~100 条弹幕列表
  • 点赞飘心动画队列
UI 只展示“最终结果”,不是 ECS 的全部细节。

2.3. 缓存/存储数据(持久或权威数据)

  • 存储位置:

    • 本地缓存(PlayerCache、localStorage、文件)
    • 服务端数据库(最终权威)
  • 特点:

    • 持久化、跨会话
    • 需要安全校验
    • 不能由 UI 或 ECS 直接写入
  • 用途:

    • 用户总点赞数
    • 用户等级、货币、背包
    • 策划配置(Config)

例子:

  • totalLikes(用户累计点赞)
  • 用户等级、金币等属性
  • 直播间配置数据
缓存/数据库属于 ECS 之外的世界,只能由“控制器”访问。

🎮 3. 控制器(Controller)在整个架构中的角色

控制器是整个系统的 调度中心、编排者、中介层

控制器的职责:

✔ 1. UI → ECS 的输入入口

  • UI 点击事件交给控制器处理
  • 控制器做权限、节流、业务判断
  • 然后写入 ECS(创建实体/修改组件)

UI 绝不能直接操作 ECS。


✔ 2. ECS → UI 的同步出口

  • 控制器监听 ECS 状态变化
  • 合并、过滤、节流
  • 再把结果推给 UI

UI 更新频率通常为:

  • 30 FPS
  • 或每 50–100ms 一次
  • 或按需刷新

✔ 3. ECS → 缓存/服务端的同步

  • 从 ECS 的最终结果中读取需要持久化的数据
  • 存入本地缓存(PlayerCache)
  • 批量/节流上报到服务端

✔ 4. 加载数据 → 写入 ECS

  • 游戏启动/进入直播间时
  • 加载缓存或服务端数据
  • 写入 ECS 初始状态

✔ 5. ECS 世界管理

  • 控制 ECS World 的创建 / 销毁
  • 控制不同 ECS 子世界的运行
  • 统一管理系统更新顺序

🔁 4. 完整数据流示例:直播点赞场景

① 实时点赞事件(高频输入)

点赞 event 来自直播服务器
            ↓
ECS:创建 LikeEventComponent 实体
            ↓
ECS 系统处理(动画、计数、特效)
            ↓
事件/计数变化通知控制器

② 控制器同步给 UI(节流/过滤)

控制器合并变化(比如每 50ms)
            ↓
UI.updateLikeCount()
UI.appendToList(recent 50 likes)

③ 控制器同步到本地缓存

控制器检测计数变化
            ↓
PlayerCache.totalLikes = ECS.counter

④ 控制器批量同步到服务端

每 1~3 秒向服务器上传一次

⑤ UI 点击事件 → 控制器

UI 点赞按钮点击
            ↓
控制器.onUserLike()
            ↓
写 ECS(创建点赞事件)

🧠 5. 最终架构图(完整)

             [ UI 层 ]
        (按钮、列表、展示状态)
                  │
           点击事件/输入
                  ↓
      ┌─────────────────────┐
      │     控制器 Controller     │
      │ 业务判断/节流/校验/汇总     │
      └─────────────────────┘
       ↑        ↓          ↑
 (节流后的展示) (写入ECS)   (写缓存/同步服务器)
       │        │          │
   [ UI ]   [ ECS系统 ]   [ 缓存/数据库 ]
            (运行时数据)

🏁 6. 最终总结(一句话版)

**ECS 负责高速运行时状态。
UI 负责最终展示。
缓存负责长期持久化与权威数据。
所有数据流转必须通过控制器完成。**

这是直播系统、游戏系统、UI 系统使用 ECS 的 最佳工程实践

最后修改:2025 年 11 月 15 日
反正没人给,你也爱给不给吧。