离线模式
在 MCE 中,"离线"有两种完全不同的含义,把它们混为一谈,最快的后果就是花上一整天去调试一个本来就不该存在的连接。
| 是什么 | 适用于谁 | |
|---|---|---|
| 没有联机层 | 引擎在编译时没有 MCE_ONLINE 脚本定义,Nakama 层根本不会被编译进去。 | 所有单机作品。这是默认情况。 |
| 离线回退 | 联机层确实编译进去了,但此刻没有服务器响应。 | 服务器宕机的联机作品,或没有网络的玩家。 |
单机作品完全不需要这一页:没有 MCE_ONLINE,就没有可以丢失 的连接。下文讲的是第二列。
什么会让一次会话进入离线
NakamaManager 只有一个状态机,有四种不同情形会把它置为 Offline:
| 情形 | 会发生什么 |
|---|---|
找不到 OnlineConfig 资源 | 进入 Offline,日志中出现 No OnlineConfig found. Online features disabled. |
配置中 EnableOnline 被关闭 | 进入 Offline,连接调用返回 false 而不是抛出异常 |
连接失败且 AllowOfflineFallback 开启(默认) | 进入 Offline,日志中出现 Falling back to offline mode. |
连接失败且 AllowOfflineFallback 关闭 | 进入 Failed——一个独立状态,留给宁可停下也不愿半联机运行的作品 |
最后一行正是这个开关存在的理由。进度必须由服务器裁定的作品——竞技排位、共享经济——与其让玩家玩一场服务器永远不会接受的会话,不如干脆拒绝启动。而联机只是加分项的作品需要的恰恰相反。开关就在 OnlineConfig 资源里,紧挨着 EnableOnline。
IsOffline 对 Offline 和 Disconnected 都为真,因为提问"我现在能发送吗?"的代码,在两种情况下要的是同一个答案。