- 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 路线与决策点
4.0 KiB
4.0 KiB
文字修仙 · 联网化方案(阶段 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 是否现在就引入 WebSocket(聊天),还是先纯 HTTP 做可见性(1a)、WS 留 1b?
- 战力榜的「战力」口径怎么定(新增加权综合战力?权重如何)?
- 阶段 2 的 PvP 是否现阶段必需、范围多大(轻量比武 vs 完整 PvP 经济)?
- 公网部署的时间线与安全基线(何时上、要不要现在就规划 HTTPS/限流)?