跳转至

成长教程 · 总览与路线图

你已经有了一条能跑的 Nythros 链路(见快速启动路径 A: composer create-project nythros/skeleton my-game)。本教程从那个最小骨架出发, 一章打通一个功能语义,直到覆盖 demo 的全部玩法。每章末尾都有「可运行验收」——照做就能确认这一阶真的通了。

本教程只教你用公开 API(engine 的 Nythros\Contracts\* 接口 + framework 无 @internal 的类)。 demo 里你会看到它装配引擎 @internal 实现(WorldGridAOI、序列化器……)——那是 0.x 组装层的 特权(见 ADR-023),教程刻意不依赖它, 以便这些代码在 v0.1 → v1.0 之间稳定可用。

起点:skeleton 已经有什么

skeletonGameServer 继承 Nythros\Framework\Server\RealtimeServer,开箱即带:

能力 入口 用的公开 API
认证(uid 直通) GameServer::handleAuthMessage Contracts 实体 + BasePlayer
移动 + 视野广播 RealtimeServer::handleMove(基类模板) WorldInterface + broadcastToView
NPC 巡游 src/Actor/WanderingNpc BaseNPC::onIdle
心跳 GameServerpingpong 路由 Message::create

没有:token 认证、战斗、掉落、背包、持久化、聊天、组队帮派、匹配房间、经济、GM、反作弊、插件、多进程集群。 下面每一样是一章。

成长阶梯

按依赖顺序排列。第 01→10 章建议在同一个 my-game 工程里连续叠加(后面章节会用到前面的成果)。

打通的语义 新引入的公开 API Redis 依赖 demo 对照
01 认证 uid 直通 → 签发/消费多 scope token TokenManagerInMemoryTokenStore/RedisTokenStoreTokenStatus 单进程可 InMemory,跨进程需 Redis StaticAuthenticator + handleAuthMessage
02 战斗 attack/skill/掉落,视野广播 combat:hit CombatServiceMonsterActorDamageablemake:actor --kind=monster 否(进程内) MapServer 战斗路由
03 背包与持久化 拾取进背包 → 归档落库 InventoryStorageInterfacePersistPipelineInterfaceArchivePipeline/RedisExportPipeline 双实现) 否(InMemoryStorage 起步;demo 缺省 export 模式=Redis 权威+Stream+exporter,见该章 §5) 管线 + MySqlStorage(export 经 run-exporter.php
04 聊天 五 scope 世界/频道/队伍/帮派/私聊 SocialServiceConnectionHubInterface 单进程可,跨角色需 Redis 多 scope token SocialServer + WorkermanHubTransport
05 组队与帮派 invite→accept 状态机、帮派 CRUD TeamStoreInterfaceGuildStoreInterface 跨进程共享需 Redis 实现 SocialServer::handleTeam/handleGuild
06 匹配与房间 撮合进房、每房间独立战斗容器 MatchingServiceMatchJoinHandlerInterfaceRoomInstanceInterface RoomHub + MatchJoinOrchestrator
07 经济 邮件/交易行/货币账本 framework 经济服务(均仅 Redis 实现——本章起需 Redis) MapServer auction/mail/economy 路由
08 GM 与反作弊 白名单命令总线、超速检测 GmCommandBusGmPermissionInterfaceMovementValidator StaticGmAuthorizer + MapChannelFactory 装配
09 插件系统 生命周期插件、配置型插件注册 PluginInterfacePluginRegistryContainer AnnouncerPlugin
10 集群扩展 多进程、服务发现、跨图迁移 ServiceRegistryInterface仅 Redis)、DeployConfig bin/server + run-worker + 转移票据

怎么读

  • 前置:先跑通路径 A(skeleton 起服 + 客户端)。没跑通的先回快速启动
  • 环境:Linux / WSL2(pcntl/posix),PHP ≥ 8.3。07/10 额外需要 Redis(docker compose up -d redis 即可)。
  • 每章结构:① 这一阶要什么 → ② 依赖注入(bin/map-worker.php 里 new 出服务)→ ③ 处理路由(GameServer::handleAuthenticated 加 case)→ ④ Actor 钩子 → ⑤ 客户端验收 → ⑥ demo 对照。
  • 改的是你自己的工程my-game/),不是 monorepo;每章代码都基于 create-project 出来的骨架叠加。

准备好了就从 01 认证 开始。