主 题
博客系统自文档 · 第 10/16 篇
目录 · 上一篇:RPG 玩法全览 · 下一篇:事件驱动与模块解耦
写在前面
第 9 篇讲了 RPG 玩什么;本篇讲 怎么搭:模块目录、实时推送、异步经验三条线。
功能与体验(技术视角)
| 用户动作 | 同步反馈 | 异步处理 |
|---|---|---|
| 签到升级 | /realtime 弹窗 Toast |
写 DB、成就判定 |
| 评论得经验 | 可选 WS expGain |
Stream 消费者加 EXP |
| 发文 | — | ARTICLE_PUBLISHED → 经验 |
Home 端:use-rpg-realtime-handlers.ts 把 WS 事件映射为 Toast / 全屏动画。
设计与实现
模块目录(按领域)
rpg/
├── core/ rpg.service, rpg-notify.service, punishment
├── level/ sign, article-level
├── social/ tip, social-interact, reputation
├── lottery/ lottery
├── listeners/ rpg-event.consumer ← 消费 blog:events
└── entity/ 17+ 表
单一 RpgModule 注册全部 provider,API 前缀 /rpg/*。
实时推送链
flowchart LR
Biz[RPG Service]
Notify[RpgNotifyService enrich/防抖]
GW[RealtimeGateway /realtime]
Home[use-rpg-realtime-handlers]
Biz --> Notify --> GW --> Home
- 网关统一在
core/realtime,不是独立/rpgnamespace - 事件名见
ws-events.ts:levelUp、expGain、achievementComplete等 - Nginx:
/socket.io/→ :5000
异步:Redis Stream
Comment/Like/Article → BlogEventPublisher → blog:events
→ rpg-event.consumer → 加经验/成就/任务进度
解耦原因:评论接口快速返回,RPG 计算与 DB 写入在 consumer 里重试、聚合。
物品配置单一数据源
rpg_item_config + 启动种子 COSMETIC_ITEM_SEEDS;C 端展示字段 API 下发,Home 不硬编码物品 map。
踩坑与取舍
- RpgNotifyService 防抖:连续 exp 合并推送,避免 WS 风暴。
- BanGuard:禁言用户 RPG 接口 403,与
banStatusWS 联动。 - PM2 多实例:Socket.IO 靠 Redis Adapter 同步 room。
系列导航
- 导读 · 第 0 篇
- 玩法:第 9 篇 · 下一篇:11 事件驱动
延伸阅读
RPG-TECH.md、table.mdcore/realtime/README.md

全部评论(0)