Nelaric Unreal Gameplay
Gameplay framework API
Loading...
Searching...
No Matches
NetworkSessionTransitions.zh-CN

English | 简体中文

网络会话与权威转换

目标与边界

Unreal Engine 的网络模式回答的是“这个 World 当前扮演什么角色”:

  • **单机**:本地拥有玩法权威,不接收远程玩家。
  • **监听服务器**:本地拥有玩法权威,并接收远程玩家。
  • **客户端**:连接远程权威,不负责裁定玩法。
  • **独立服务器**:由没有本地玩家的服务器进程提供权威。

网络模式只能说明已经建立的 World 的现状,不能表示一次切换正在进行或已经成功。框架需要分别记录期望角色、旧权威与目标权威、目标 World,以及转换进度。只有目标 World 和所需连接准备完成后,才确认切换结果。例如,加入远程服务器期间,前端 World 仍可能是单机模式,但它不是已就绪的玩法服务端。

切换也不等于换图。地图旅行、网络角色变化、进度同步和线上功能开放可以分别发生。加入远程服务器通常需要旅行;登录、同步进度、启用线上功能,或允许远程玩家加入现有本地 World,则不必然更换地图。

转换路径

路径 含义与必要边界
单机 → 监听服务器 现有本地权威 World 的内容和运行状态允许接入时,可原地开放远程玩家加入。开放准入前须确认监听已建立。若所选启动配置要求另一张地图,也可以先加载新地图。
监听服务器 → 单机 先关闭准入,处理已连接玩家和会话可见性,再停止监听。若玩法状态允许,本地权威可在同一 World 继续运行。仅停止监听不能完成远程玩家的收尾。
单机 → 客户端 先处理本地进度,再连接远程权威并跟随服务器 World。本地启动地图不决定远程地图。
客户端 → 单机 离开远程权威并建立本地权威 World。返回本地前端与继续原有玩法内容不同;后者需要获准使用的快照和明确的恢复规则。
客户端 → 监听服务器 退出旧会话后创建无关的新主机,可组合普通退出与建主机操作。接任旧会话则需要状态转移与玩家重连,属于权威迁移。
监听服务器 → 客户端 关闭当前主机后加入另一主机,可组合普通关服与加入操作。将现有会话交给另一主机则需要权威迁移。
客户端 → 客户端 即使网络模式仍为客户端,更换远程权威也是一次转换。须跟踪旧连接、目标身份、旅行、新连接以及完成或失败。

同一权威下由服务器发起的地图切换,与客户端主动前往另一服务器,在旅行决策的归属上不同,转换流程须保留这一区别。独立服务器由服务器进程启动并加载配置的本地 World;它不是客户端或监听服务器进程的运行时目标模式。

执行前的权威确认

RequestTransition 只登记转换意图并返回句柄,不授权立即旅行或改变网络角色。旧权威须批准离开,目标权威须批准接纳并预留所需容量。若某一端是单机 World,则由该端的本地权威作出决定。客户端不能代替远程权威批准;关闭主机或由服务器发起的换图也必须由服务器作出决定,不能仅凭客户端请求执行。

协调器将两份确认绑定到同一请求标识、源会话代次、目标身份和截止时间,并在执行前再次校验确认和目标预留。只有两端确认均有效,才能开始旅行、开放或关闭监听,以及移交玩法权威。拒绝、权威失联、确认不匹配或过期、超时都会在这些操作开始前结束请求。执行前取消须释放目标预留;执行已经开始后,取消不能保证撤销 Unreal 已完成的旅行。

批准与完成是两个独立阶段。执行后,协调器仍须验证结果 World、连接、运行状态与玩法权威,之后才能报告成功。单凭网络模式无法标识目标服务器,也无法证明任一端已批准。目标信息和审批消息传输由接入项目的会话集成提供;GameInstance 子系统本身不是客户端拥有的 RPC 端点。

当前项目实现通过 PlayerController RPC 和目标 Online Beacon 处理客户端换服。目标端在 CanAcceptTransition() 中暂时直接返回 true;读取活动 WorldStartupConfig.MaxPlayers 的位置标记为 TODO(NELARIC-TRANSITION-CAPACITY-INTEGRATION)。当前尚未预留容量,也未在 PreLogin 校验预留;上述措施仍是正式执行目标服人数上限所需的条件。

调用方提供 FTransitionDestination,其中包含两个通用 FNetworkEndpoint。每个端点分别记录主机地址和端口:游戏端点用于旅行连接,Beacon 端点用于目标服审批连接。目标服须监听所提供的 Beacon 端口;ANelaricGameModeBase::TransitionBeaconListenPort 默认是 15000,可按服务器配置。

World 启动与准入

启动方在加载地图前选择并持有 World 启动配置。配置描述地图和玩家策略,不记录当前网络角色或复制的运行状态。启动方在旅行前校验配置及目标容量。目标 World 和预期角色确认后,权威端建立运行时状态并应用启动策略。准备完成前始终关闭准入;之后再按配置的初始准入策略决定是否开放。

一次操作只有一个终态:就绪、取消、超时或带原因的失败。World 销毁、旅行失败、连接中断及被新操作取代的旧操作,都不能让旧回调把新 World 标记为就绪。因此,会话协调器须独立记录期望角色和转换进度,不以观测到的网络模式替代它们。

切换机制的作用与例外

切换机制帮助项目协调 World、连接和玩法权威的交接,避免在转换期间把旧 World 或尚未建立的连接当成目标会话。通常,改变玩法权威应通过旅行进入目标权威的 World,并在连接和运行时状态准备完成后继续玩法。这是默认路径,尤其适用于加入远程服务器、跨服和退出远程会话。

框架也允许项目在明确需要时保留地图内容,完成不以换图为前提的转换。例如,离线进度可在本地游玩后提交给在线权威,由在线权威决定是否接收并继续裁定;现有本地 World 也可在准备就绪后开放远程玩家加入。这类路径通常不宜作为默认流程,项目须自行明确状态交接、信任与冲突规则。