跳转到正文

服务调用关系 ​

本文说明当前 Docker 离线部署的服务调用关系。仓库职责见架构与仓库边界,安装步骤见Docker 安装。图中实线箭头表示请求或数据访问方向,响应沿原连接返回;虚线表示一次性初始化,双向箭头表示服务间通信,不表示启动顺序。

图表支持放大、缩小和重置;窄屏可在图内横向滚动。图下文字和表格提供对应说明,图源也可展开查看。

浏览器入口 ​

玩家与管理员的请求入口
100%

正在加载图表…

查看 Mermaid 图源
flowchart TB
  player[玩家浏览器 / PWA] -->|HTTP / WebSocket| gateway[Gateway :3338]
  manager[管理员浏览器] -->|HTTP :8000| admin[Admin / Nginx :8080]
  gateway -->|静态文件和资源读取| assets[PWA / GRF / 音效 / 自定义资源]
  gateway -->|WebSocket 转 TCP| game["`login :6900
char :6121
map :5121`"]
  gateway -->|游戏会话和原生 Web 接口| web[web-api :8889]
  gateway -->|/api/adventure-tools/*| api[Go API :8080]
  admin -->|/api/*| api

玩家打开 Gateway 提供的 PWA,浏览器的页面、资源、游戏连接与冒险工具请求都从这个入口进入。管理员打开 Admin 提供的管理前端,Admin 的 Nginx 将 /api/* 代理到 Go API。

请求经过的服务用途
PWA 页面、图片、地图、音效浏览器 → Gateway → 静态文件与挂载资源Gateway 提供页面并读取、解析游戏资源
/ws/*浏览器 → Gateway → login / char / mapGateway 将 WebSocket 转为游戏 TCP 连接
/api/game-session/*浏览器 → Gateway → web-api游戏会话相关请求
/charconfig、/emblem、/MerchantStore、/party、/userconfig、/get 及其子路径浏览器 → Gateway → web-apirAthena 原生 Web 功能
/api/adventure-tools/*浏览器 → Gateway → Go API玩家冒险工具的资料查询与业务操作
后台 /api/*管理员浏览器 → Admin / Nginx → Go API后台身份认证、管理和资料接口

登录、选角、进入地图时,客户端按阶段通过 Gateway 连接相应的 login、char、map。普通移动与战斗封包的路径是 浏览器 → Gateway → map,不会逐条经过 Go API、login 和 char。

后台和冒险工具如何操作游戏 ​

业务接口到实时游戏操作的调用链
100%

正在加载图表…

查看 Mermaid 图源
flowchart LR
  player[玩家工具 / Gateway] -->|HTTP| api[Go API]
  manager[后台 / Admin Nginx] -->|HTTP| api
  api -->|HTTP + Token| web[web-api]
  web -->|Unix Socket| map[map]
  api -->|SQL| db[(MariaDB)]

需要读取或修改实时游戏状态的功能,经 Go API 做身份、权限和业务校验,再通过带 Token 的 /game-control/v1/* 请求 web-api。web-api 通过共享目录里的 Unix Socket 转给 map,由 map 校验当前游戏状态并执行;结果沿原请求链返回。

Go API 也直接访问数据库,并读取资料图片和自定义目录。资料查询、管理数据操作等不必全部走 map;不能把每个冒险工具接口都理解成四段转发。

API 与 web-api 的分工

api 是 happyro-api 仓库的 Go 后端,服务后台和玩家工具。web-api 是 happyro-server 镜像运行的 rAthena web-server,承担游戏 Web 功能与受控游戏操作入口。两者是不同服务。

玩家工具调用 Go API,便于与后台共用业务规则、权限与资料查询;移动、战斗等实时游戏逻辑仍由 Server 处理。

游戏服务与数据库 ​

游戏服务内部通信与数据库访问
100%

正在加载图表…

查看 Mermaid 图源
flowchart TB
  login[login:登录认证] <-->|服务间协议| char[char:角色与存档]
  char <-->|服务间协议| map[map:游戏世界]
  login -->|SQL| db[(MariaDB :3306)]
  char -->|SQL| db
  map -->|SQL| db
  web[web-api:游戏 Web 服务] -->|SQL| db
  api[Go API:管理与冒险工具] -->|SQL| db
  init[api-init:一次性初始化] -.->|迁移、账号与资料导入| db

login 与 char、char 与 map 通过服务间协议协作。各服务按自身职责访问同一个 MariaDB 实例;图中的 SQL 箭头不表示它们拥有相同的数据库权限。

数据库内容
happyro游戏账号、角色和存档等数据
happyro_log游戏日志
happyro_admin管理账号、后台会话、业务记录等管理数据

api-init 使用 API 镜像执行迁移、初始管理账号创建和资料导入,正常完成后退出。它不是常驻 API 服务,也不参与玩家请求转发。默认游戏账号与角色由 Database 首次空库初始化创建。

镜像、服务和端口 ​

五类镜像对应八个常驻服务和一个一次性任务;PWA 已构建在 Gateway 镜像中,没有独立 Client 容器。

镜像Compose 服务主要职责默认端口
GatewaygatewayPWA、资源、HTTP / WebSocket 代理宿主机 3338 → 容器 3338
Adminadmin管理前端及 API 反向代理宿主机 8000 → 容器 8080
APIapiGo 业务接口内部 8080
APIapi-init一次性初始化不提供常驻入口
Serverlogin登录认证内部 6900
Serverchar角色选择、角色数据内部 6121
Servermap地图、战斗、NPC、实时操作内部 5121,另有控制 Unix Socket
Serverweb-apirAthena Web 与 Game Control内部 8889
DatabasedatabaseMariaDB内部 3306

当前 Compose 默认只向宿主机发布 Gateway 与 Admin 两个入口。其余端口用于 Docker 网络内通信;web-api → map 控制链使用共享 Unix Socket,不是 TCP 5121。图中未展开日志、自定义配置等全部文件挂载。

GATEWAY_PORT、ADMIN_PORT 可调整宿主机入口端口。隔离验收工具会另选本机端口并绑定回环地址,不一定使用 3338 和 8000。本机源码开发的进程地址以对应环境配置为准。

实现依据 ​

HappyRO 仅供个人学习与研究,任何商业用途均须自行承担相应责任。