Unreal Engine Pixel Streaming Matchmaker无法转发客户端至空闲Signalling Server
问题原因与解决方案
核心问题定位
从日志和配置来看,两台Cirrus(Signalling Server)已成功连接到Matchmaker,但Matchmaker判定无空闲服务器的原因在于:
- Cirrus未配置明确的
MaxPlayerCount,Matchmaker无法识别服务器容量 - 两台Cirrus的
PublicIp完全相同,导致Matchmaker无法区分不同实例 - 无限制容量(
MaxPlayerCount: -1)触发Matchmaker的空闲判定逻辑异常
分步解决方案
1. 为Cirrus配置明确的玩家容量
在两台Cirrus的config.json中添加MaxPlayerCount字段(根据单实例玩家数需求设置,比如单玩家实例设为1):
// Signalling Server 1 config.json { // 原有配置不变 "MaxPlayerCount": 1 } // Signalling Server 2 config.json { // 原有配置不变 "MaxPlayerCount": 1 }
当MaxPlayerCount设为-1(无限制)时,Matchmaker无法正确判断服务器是否还有空闲位置,设置具体值后,Cirrus会主动向Matchmaker上报当前玩家数,Matchmaker即可正常判定空闲状态。
2. 修改PublicIp以区分不同Cirrus实例
由于两台Cirrus在同一机器的不同端口运行,需要让Matchmaker通过PublicIp标识区分它们:
- SS1的
config.json修改:
"PublicIp": "localhost:80"
- SS2的
config.json修改:
"PublicIp": "localhost:70"
Matchmaker依赖PublicIp作为Cirrus实例的唯一标识,相同的PublicIp会被识别为同一服务器,导致状态覆盖或判定错误。
3. 重启服务验证
按以下顺序重启所有服务:
- 关闭运行中的Matchmaker和两台Cirrus
- 先启动Matchmaker,等待日志显示
Matchmaker listening on *:9999 - 分别启动两台Cirrus,确认日志显示
Cirrus connected to Matchmaker localhost:9999 - 访问
localhost:90,观察Matchmaker日志是否不再出现No empty Cirrus servers are available警告
4. 验证状态同步
保持Cirrus的LogVerbose: true配置,查看日志中是否有向Matchmaker发送playerCount更新的记录;同时查看Matchmaker日志,确认收到Cirrus的状态消息。
内容的提问来源于stack exchange,提问作者Dev Patel
相关产品推荐
相关产品推荐

