Files
wenzi-xiuxian/联网化方案.md
jkooe 8cf206112f 文字修仙 联网化阶段0:账号体系 + 存档上云 + FastAPI 服务端
- account.py:PBKDF2 加盐哈希 + token 登录态(纯标准库)
- db.py:SQLite 数据层,复用 Game.to_dict/from_dict,跨进程持久化已验证
- web_views.py:抽出 player_data/catalog_data/actions_data 为单一数据源;web_server.py 改为引用
- app.py:FastAPI 服务端(注册/登录/状态/指令/秘境/存档/登出)+ 内嵌登录与游戏面板
- run.sh:新增 server 模式(走 .venv);requirements.txt:fastapi/uvicorn/websockets
- 联网化方案.md:阶段1-3 路线与决策点
2026-09-05 07:26:13 +08:00

4.0 KiB
Raw Permalink Blame History

文字修仙 · 联网化方案(阶段 1–3)

阶段 0 已落地(账号体系 + SQLite 存档上云)。本方案给出后续三阶段的演进路线、每阶段做法、风险与待拍板点。 技术栈已定:FastAPI + uvicorn + websockets + SQLite;Redis 暂缓(仅 2~3 人在线,进程内 dict 足够,避免过度设计)。

一、现状边界(阶段 0 已落地)

  • ✅ 账号:注册 / 登录(PBKDF2-HMAC-SHA256 加盐哈希 + token 登录态)
  • ✅ 存档上云:每账号独立存档落 SQLite,操作即落库,跨进程持久化已验证
  • ⚠️ 仍是「各玩各的」:玩家之间互不可见、不可交互

二、总体路线

从「能存档的多人单机」逐步演进到「真·同服 MMO」:

阶段 目标 实时通道 风险 建议优先级
阶段 1 同服可见(在线列表 / 世界聊天 / 战力榜) HTTP 起步,聊天引入 WS 低 先做的体验跃升
阶段 2 实时对战(WS 实时通道 + 跨玩家比武) 全量 WebSocket 高 放后面
阶段 3 公网运营(换 Postgres / 部署公网 / 鉴权强化) — 中(基建) 最后动

三、阶段 1:同服可见

目标:让 2~3 人知道「谁在线、在干嘛、谁强」,并能世界喊话。

1a 零新协议(低风险,建议先做)

  • 在线列表:服务端维护 WORLD = {username: 连接/MpSession 引用},/api/status 附带在线名单。
  • 战力榜:按综合战力倒序返回 Top N。⚠️ 现有 player_data 的 power 是「境界威压名」,非综合战力,需新增 combat_power()(atk/def/speed/realm 加权),口径待皇上定。
  • 前端:状态卡下方加「同服修士」面板(在线 + 榜)。
  • 改动:app.py 加 /api/online、/api/rank;前端加面板。不动协议。

1b 引入 WebSocket(世界聊天 + 实时在线)

  • 世界聊天:/ws/chat,连接后广播发言;前端聊天框。
  • 在线状态实时推送:上线/下线广播(替代 4s 轮询感知)。
  • 改动:新增 world.py(在线/榜/聊天状态,进程内 dict);app.py 加 /ws/chat;前端加聊天 UI。
  • 技术:用已装的 websockets,无需新依赖。

四、阶段 2:实时对战

目标:WebSocket 实时通道 + 跨玩家比武,形成核心玩法闭环。

  • 2a 实时化:状态用 WS 推送,去掉 HTTP 4s 轮询;命令可走 WS(或保留 HTTP 命令 + WS 推送)。
  • 2b 跨玩家 PvP:⚠️ 当前 DuelSystem 是单人内部切磋,不支持指定对手。需先确认其接口,再新增 PvP 编排(匹配在线玩家 → 双方 Game 交互结算)。这是改动最大、并发安全最敏感的部分。
  • 改动:app.py(WS 端点)、可能新增 pvp.py、web_views/前端改实时。
  • 风险:高——双 Game 状态同步、锁粒度、断线处理。

五、阶段 3:公网运营

  • 换 Postgres:db.py 抽象连接层,存档 payload 结构不变,平滑迁移(零序列化改动)。
  • 部署公网:反向代理 + HTTPS + 限流。
  • 鉴权强化:token 过期、HTTPS 强制、登录限流防爆破。
  • ⚠️ 现阶段仅局域网/单机信任,上公网前鉴权基线必须补齐。

六、臣的建议排序

1a(在线/榜,HTTP)→ 1b(聊天,WS)→ 2a(WS 实时化)→ 2b(PvP)→ 3

理由:先低风险拿「同服可见」体验,再逐步上 WS 与对战,最后才动基础设施(DB/部署),每一步都可独立验证、可回退。

七、待皇上拍板

  1. 阶段 1 是否现在就引入 WebSocket(聊天),还是先纯 HTTP 做可见性(1a)、WS 留 1b?
  2. 战力榜的「战力」口径怎么定(新增加权综合战力?权重如何)?
  3. 阶段 2 的 PvP 是否现阶段必需、范围多大(轻量比武 vs 完整 PvP 经济)?
  4. 公网部署的时间线与安全基线(何时上、要不要现在就规划 HTTPS/限流)?