SuperAPI AI 工具集

dedicated-server

部署与运维

查看项目

更新于 10-15 12:38

技能介绍

本技能面向使用 Godot 4.3+ 构建专用服务器(dedicated server)的开发者,所有示例均针对 Godot 4.3+,不使用已废弃 API,先给出 GDScript 示例,随后附 C# 版本。相关技能包括 multiplayer-basics(ENet 设置、RPC、权威模型)与 multiplayer-sync(状态同步与插值)。

一、用途 用于构建无显示、无 GPU、无音频设备的专用服务器,包括无头导出、服务器架构设计、大厅管理与部署。

二、主要能力

  1. 无头导出:通过命令行 --headless 标志在运行时抑制显示与音频驱动,该标志适用于任何已导出的二进制;服务器导出模板会从二进制中完全剥离渲染,减小体积。在 Godot 编辑器中创建 Linux/X11(或 Linux Server)导出预设,在 Options → Binary 下启用 Export As Dedicated Server(Godot 4.2+),并在 Resources 的 Exclude 列表中剔除仅客户端资源(着色器、高分辨率纹理、音频文件)。
  2. 特性标签:使用 OS.has_feature() 在运行时区分服务端与客户端代码。可用导出预设的自定义特性,或依赖服务器模板自动设置的 dedicated_server 内置特性。文档给出特性标签对照:dedicated_server 由服务器导出模板设置,是检测服务器二进制最可靠的方式;headless 由 --headless CLI 标志在运行时设置,不写入二进制;自定义 server 特性来自导出预设的 Custom Features,适合在多个角色间共享同一二进制。
  3. 服务器架构:无头服务器上 _process 与 _physics_process 仍正常运行,但不会渲染任何内容;建议将全部服务器逻辑放在 _physics_process 中以获得确定性的固定速率更新。示例包含 ServerMain 自动加载节点、server_tick 计数、Engine.physics_ticks_per_second 设置,以及用 multiplayer.is_server() 判断权威服务器。还介绍将仅服务端节点(物理、AI、计分)与仅客户端节点(相机、HUD、音频)分离,通过 PROCESS_MODE_ALWAYS / PROCESS_MODE_DISABLED 切换,并在脚本 _ready() 顶部使用 Engine.is_editor_hint() 守卫。
  4. 大厅系统:以 peer_id 为键的每玩家状态字典是标准模式,服务器持有权威字典,客户端通过 RPC 接收更新;实现 --max-players CLI 上限与 ready 切换 RPC,让所有对等端在开始前确认。完整实现见 references/lobby-management.md。
  5. 比赛流程:用状态机驱动 大厅 → 倒计时 → 游戏中 → 结果,服务器权威,客户端只接收状态变更 RPC;常见状态为 LOBBY、COUNTDOWN、IN_GAME、RESULTS。完整状态机见 references/match-flow.md。
  6. 服务器配置:从 OS.get_cmdline_args() 解析 --port、--max-players、--tick-rate、--log-level,并在首个物理帧前预设 Engine.physics_ticks_per_second。解析辅助代码见 references/server-config.md。
  7. 部署:标准生产布局为 Linux VPS + Dockerfile + systemd 服务文件。Dockerfile 打包无头导出模板、导出的 PCK 以及 .NET 运行时(C# 项目);systemd 负责自动重启、通过 journald 的日志轮转与资源限制。详见 references/deployment.md。

三、使用方式 在 Godot 编辑器中创建并配置服务器导出预设,导出无头二进制;通过命令行传入 --headless 及配置参数运行;在启动脚本中依据 dedicated_server 特性或 headless 显示驱动名称分支服务端/客户端逻辑;在服务器上禁用渲染循环并组织仅服务端逻辑;按需接入大厅、比赛流程与配置解析;最后用 Docker 与 systemd 部署到 Linux VPS。

四、适用场景 需要为 Godot 4.3+ 多人游戏搭建权威专用服务器的项目,尤其是需要无头运行、大厅管理、比赛流程控制与自动化部署的场景。

五、限制 文档未提供具体收费、价格、平台支持范围或性能效果数据;部分实现细节(大厅、比赛流程、配置解析、部署)以引用文件形式给出,正文未展开完整代码。