游戏服务器生命周期
注意:本页上的内容适用于 Unity Cloud 后台中的 Multiplay Hosting。如果您使用 Clanforge,请参阅 Clanforge 文档。
服务器生命周期是指在具有受保护资源的机器上作为进程运行的版本可执行文件的生命周期。它具有三个不同的阶段:
服务器生命周期的开始和结束因游戏要求而异。它可能大大早于或略微早于分配生命周期开始,并且可能会在每个分配之后结束,也可能会持续多个分配的时间。
创建
服务器生命周期的第一个阶段是在机器上创建服务器席位。服务器席位类似资源占位符,用于运行版本可执行文件。Multiplay Hosting 为机器进行资源调配并启动机器时,会根据服务器密度计算来创建多个服务器席位。根据机器的可用资源和机群的使用设置,通过服务器密度计算可以得出适合机器的服务器席位数。
启动
服务器生命周期的第二个阶段是使用信息(例如版本和配置选项)将版本可执行文件(或 Docker 镜像)作为进程在第一个阶段创建的服务器席位上启动。
服务器何时启动取决于游戏要求。它通常会因响应分配请求而启动,也可以在 Multiplay Hosting 为机器调配资源时启动(取决于是否已为机群启用启动资源调配设置)。
服务器还会在其他情况下启动,包括:
- 您创建了分配,但 Multiplay Hosting 选择的服务器席位未运行正确的版本可执行文件。在这种情况下,Multiplay Hosting 会重新启动正确版本的版本可执行文件。
- 您创建了分配,但 Multiplay Hosting 选择的服务器席位使用错误的版本配置。在这种情况下,Multiplay Hosting 会重新启动具有正确版本配置的版本可执行文件。
- 您通过 API 或 Unity Cloud 后台手动启动服务器。
- 版本可执行文件进程崩溃。在这种情况下,Multiplay Hosting 检测到崩溃并自动重新启动版本可执行文件。
- 机器完成资源调配过程后,启动资源调配设置处于启用状态。
- 启动资源调配设置处于启用状态并且版本可执行文件进程有意退出。在这种情况下,Multiplay Hosting 会自动重新启动服务器。
注意:使用分配有效负载可能也会改变服务器的启动行为。
停止
服务器生命周期的第三个阶段是停止服务器版本可执行文件进程。这可以通过多种方式来实现,每种方式都会触发 Multiplay Hosting 做出不同响应。内部和外部情况均可导致游戏服务器停止,并且有时候可能涉及不只一种情况(例如退出和崩溃)。
内部停止
内部情况是指游戏服务器本身(版本可执行文件进程)产生的事件。这类情况包括:
下图展示了服务器生命周期,其中内部情况触发了服务器停止。
有意退出
有意退出是指使用退出代码 0 有意终止版本可执行文件进程。Multiplay Hosting 检测到版本可执行文件有意退出后,会自动取消分配服务器席位、清除 server.json
文件中的分配 ID 并将服务器席位准备好用于下次分配。
对于大多数游戏来说,建议最好使用 Matchmaker 流程。在该流程中,版本可执行文件进程会在每个会话结束后退出。采用这种方式退出会触发自动取消分配。
崩溃
崩溃是指使用任何非 0 的退出代码(与有意退出相反)意外终止版本可执行文件进程。Multiplay Hosting 检测到版本可执行文件崩溃,会尝试通过使用相同的分配 ID 来重新启动服务器以恢复其运行。不过,如果服务器继续处于崩溃状态,Multiplay Hosting 不会持续对其进行重新启动。请参阅崩溃退避。
外部停止
外部情况是指在调用 API 或 Multiplay Hosting 自动执行操作时产生的事件。这些事件产生的原因在于配置或对游戏服务器行为进行响应。这类情况包括:
下图展示了服务器生命周期,其中外部场景触发了服务器停止。
游戏服务器异常行为
异常行为表示版本可执行文件进程发生了崩溃以外的意外事件。通常,这意味着,版本可执行文件进程使用了多于服务器席位允许的资源量或者长时间未对查询做出响应。
注意:如果您在版本中实施了查询协议并在版本配置中指定了该协议,则 Multiplay Hosting 仅会检查游戏服务器是否对查询进行了响应。
注意:如果目的是手动停止当前已分配的服务器,则这将不起作用,正确的做法应该是发送取消分配请求。
版本配置 ID 更改
如果您创建了分配,但 Multiplay Hosting 选择的服务器席位使用了错误的版本配置(不是在分配请求中指定的版本配置),Multiplay Hosting 会重新启动(先停止,然后启动)版本可执行文件进程。在这种情况下,Multiplay Hosting 会重新启动具有正确版本配置的版本可执行文件。对服务器当前正在使用的版本配置中的值进行更改时,可能不会立即反映出来。建议您遵循零停机发布模型来更新您的生成配置。
服务器生命周期变化
尽管具有共性,但并非所有游戏服务器都具有相同的生命周期。确切的生命周期行为取决于游戏会话的管理方式。常见的两种方法为:
多会话分配
多会话分配是指将同一分配重复用于多个游戏会话的游戏会话管理模式。在该模式下,在两个游戏会话之间,保持游戏服务器处于已分配状态。您可以使用其他形式进行清理,例如重置游戏服务器状态或退出到大厅,而不是在游戏会话之间退出游戏服务器可执行文件。
注意:对于多会话分配,建议最好启用启动资源调配设置。这表示机器资源调配完成后,游戏服务器即可用于分配。
采用多会话分配时,游戏服务器的生命周期具有以下过程:
- 为机器进行资源调配:Multiplay Hosting 为机器进行资源调配。
- 启动服务器:由于启动资源调配设置处于启用状态,游戏服务器可立即启动。
- 分配服务器:您分配游戏服务器。
- 游戏会话启动:游戏会话(或对战)开始。
- 游戏会话结束:游戏会话(或匹配)结束。
- 游戏会话清理:版本可执行文件继续运行,可能会执行清理逻辑,例如重置游戏服务器状态或退出到大厅。
- 游戏会话启动:游戏会话(或对战)开始。
- 游戏会话结束:游戏会话(或匹配)结束。
- 取消分配服务器:您取消分配游戏服务器。
- 服务器变为空闲状态:游戏服务器由于未被分配,变为空闲状态。
- 停止机器:Multiplay Hosting 会在机器上的所有游戏服务器处于空闲状态的时间超出活跃时间时停止机器。
单会话分配
单会话分配是指游戏会话和分配之间具有一对一关系的游戏会话管理模式。在该模式下,在每次游戏会话结束后,会退出版本可执行文件并取消分配游戏服务器。然后,您要为下个游戏会话创建新的分配。
注意:对于单会话分配,建议最好禁用启动资源调配设置。这表示,游戏服务器在您对其进行分配之前不会启动。
采用单会话分配时,游戏服务器的生命周期具有以下过程:
- 为机器进行资源调配:Multiplay Hosting 为机器进行资源调配。
- 服务器处于空闲状态:游戏服务器由于未被分配,处于空闲状态。
- 分配服务器:您分配游戏服务器。
- 启动服务器:游戏服务器在分配后启动。
- 游戏会话启动:游戏会话(或对战)开始。
- 游戏会话结束:游戏会话(或匹配)结束。
- 退出版本可执行文件。版本可执行文件在检测到游戏会话已完成并且所有玩家均已断开连接后,会使用代码 0 自动退出。
- 取消分配服务器:Multiplay Hosting 检测到版本可执行文件使用代码 0 退出后,会自动取消分配游戏服务器。
- 服务器变为空闲状态:游戏服务器由于未被分配,变为空闲状态。
- 停止机器:Multiplay Hosting 会在机器上的所有游戏服务器处于空闲状态的时间超出活跃时间时停止机器。
服务器保持
服务器保持是一种服务器管理模式,该模式允许服务器在指定时段内保持能够接收分配或执行保留。有关更多详细信息,请参阅服务器保持一节。