文档

支持

Multiplay Hosting

Multiplay Hosting

集成要求

Learn the requirements your game server must meet to integrate with Multiplay Hosting.
阅读时间7 分钟最后更新于 15 天前

为确保您可以使用 Multiplay Hosting 服务来托管和扩展游戏,您的游戏必须满足特定要求。请参阅以下指南,了解如何使您的游戏满足使用 Multiplay Hosting 的要求。 大多数要求与版本相关,具体来说,与版本可执行文件相关。版本包含运行游戏所需的所有文件。版本可执行文件是版本中的可执行文件。创建版本时,必须指定版本可执行文件。

一般要求

本节介绍了为使用 Multiplay Hosting,版本必须满足的一般要求。请参阅以下要求,了解更多信息:

操作系统

版本可执行文件必须支持在 Linux (Ubuntu 20.04) 上运行。您可以在创建版本时指定版本支持的操作系统。 Multiplay Hosting 仅支持 64 位 Linux 应用程序。

参数化值

版本必须支持使用参数化值的信息。Multiplay Hosting 通过配置变量
server.json file
启动参数来管理参数化值。
您可以管理版本通过其版本配置跟踪的信息。 Multiplay Hosting 使用
server.json
文件来跟踪会话特定信息,例如分配 ID、端口号和要跟踪的任何其他变量(作为配置变量)。版本进程必须支持跟踪
server.json
文件中的信息,以便可以了解服务器何时变为已分配已取消分配状态。如果您使用的是 Unity 或 Unreal,可以使用 Game Server SDK 来实现。
版本还可以读取启动参数的信息。启动参数非常适合用于设置版本可执行文件启动时所需的值,例如游戏端口。

启动条件

版本必须支持在
server.json
文件中不填充分配 ID 的情况下启动。原因在于,服务器在线准备就绪可进行分配后,您才可以分配该服务器,这意味着,在分配该服务器之前,
allocatedID
字段为空字符串 (
""
)。

网络适配器绑定

针对游戏服务器端口和查询协议服务器端口,版本必须绑定到
0.0.0.0

动态端口号

版本必须支持使用动态端口号来进行游戏数据传输。Multiplay Hosting 按服务器实例生成端口号(使用偏移来确保服务器启动时不会出现端口冲突)。 版本可执行文件必须使用
$$port$$
变量
来利用此功能。例如,您可以使用以下启动参数,在启动时将
$$port$$
变量传递给版本:
-port $$port$$

日志目录

版本必须支持为每个服务器实例生成日志。Multiplay Hosting 通过 Unity Cloud 后台展示服务器日志,可方便您查看、搜索和下载日志。 您可以通过启动参数和配置变量来控制版本保存日志文件的位置。例如,可以使用
-logFile
作为启动参数并传递
$$log_dir$$
配置变量
-logFile $$log_dir$$/engine.log
日志目录要求可选择性满足。如果不设置日志目录,则无法通过 Unity Cloud 后台访问日志和崩溃转储。

查询协议

尽管不作为一项要求,但也建议版本支持对服务器查询协议(例如 SQP)的查询做出响应。 服务器查询协议可方便查询服务器实例的信息,例如服务器状态和已分配玩家数。通常,响应中包含静态变量和动态(持续更新的)值。 Multiplay Hosting 依赖查询协议响应来确定服务器实例的运行状况。如果版本不支持查询协议或者您未正确设置查询协议,Multiplay Hosting 会判定服务器实例不响应。 此外,借助查询协议,Multiplay Hosting 可以报告和监控每个服务器的实时数据,例如并发连接玩家数 (CCU)、活动分配、失败分配、每个平台连接的玩家数以及服务器事件

分配后清理

版本必须支持某种形式的分配后(会话后)清理,以便使服务器准备就绪用于下一次分配。 有两种可选方法:
  • 可以在游戏会话结束后返回大厅或就绪状态。
  • 可以正常退出进程(例如,使用退出代码 0)。
返回大厅(或就绪状态)更适合用于重新启动游戏服务器进程。在对战结束时结束游戏服务器进程并不是使用资源的最佳方法,因为重新启动通常比清理进程成本更高。

容器版本要求

创建 Multiplay Hosting 版本时,您可选择使用多种方式来上传版本文件。 一种方式是使用 Docker 和 Multiplay Hosting 容器注册表来上传版本的容器化版本。不过,版本容器必须满足特定要求(除一般要求外),您才能使用容器版本

使用基础镜像来创建容器版本

linux-build-image 模板容器可满足使用容器版本的大多数额外要求。因此,可在大多数情况下使用基础镜像。您可以通过将以下行添加到 Dockerfile 的顶部来使用基础镜像:
FROM unitymultiplay/linux-base-image:<tag>
<tag>
替换为要使用的基础镜像的版本。您可以查看 linux-base-image 标签,获取可用的标签列表。

从头开始创建容器版本

如果您希望从头开始创建 Dockerfile,则必须自行确保容器满足以下要求。
要求描述
USER mpukgame
容器必须使用
mpukgame
作为
USER
。该用户必须具有组标识符 (GID) 2000 和用户标识符 (UID) 2000。
ENTRYPOINT
容器必须具有
ENTRYPOINT
,由 mpukgame 用户启动。
以下代码块展示了可满足这些要求的简单 Dockerfile
# ========================================================##========================================================-# Unity base image stuff##unity-base-image-stuff------------------# ========================================================##========================================================-FROM ubuntu:20.04 AS mpukRUN addgroup --gid 2000 mpukgame && \ useradd -g 2000 -u 2000 -ms /bin/sh mpukgame && \ mkdir /game && \ chown mpukgame:mpukgame /game && \ apt update && \ apt upgrade && \ apt install -y ca-certificatesUSER mpukgame# ========================================================##========================================================-# Custom game stuff##custom-game-stuff---------------------# ========================================================##========================================================-FROM mpuk AS game# copy game files here##copy-game-files-here# for example:##for-example:WORKDIR /gameCOPY --chown=mpukgame . .# set your game binary as the entrypoint##set-your-game-binary-as-the-entrypointENTRYPOINT [ "./gamebinary" ]