📘 ECS + 控制器 + UI + 缓存 数据流与交互架构总结文档
本文档总结直播场景中,点赞/弹幕等高频事件流 在 ECS 架构下如何正确处理、同步 UI、写入缓存以及与服务端交互的最佳实践。
🎯 1. 整体架构概述
在现代游戏或直播互动系统中,数据通常分为以下三层:
- ECS(运行时数据层):高频、短命、每帧更新的数据
- UI(展示数据层):节流后的 UI 可视数据
- 缓存/存储层(持久数据层):用户永久数据、配置数据等
这些层之间通过 控制器(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 的 最佳工程实践。