光子网络 - Getroomlist()

Photon Networking - Getroomlist()

我使用获取房间列表功能来获取服务器中的房间。但是一旦我加入了特定的房间,我就看不到列表了?即使我连接到房间,我如何才能看到列表?

简短回答:恐怕答案是你不能 - 它不支持开箱即用。

长答案:

根据设计

原因在于 Photon Loadbalancing 的可扩展架构 这是服务器端应用程序和通常是 sdk 的一部分 与 PUN 结合使用。负载平衡也是驱动 Photon Cloud 的原因,以防您也提到它。

发生的情况是,您的客户端最初连接到所谓的 Master,匹配发生的地方。您的客户 cn 创建一个新房间或使用房间列表或任何其他配对选项(例如 JoinRandom)加入房间。

一旦发生任何这种情况,主机将向您的客户端发送连接到托管游戏的 GameServer 所需的信息。 如果是新客户端,它会将您的客户端发送到负载最少的服务器。

在加载游戏列表及其属性的情况下,变化非常快 - 创建游戏 - 玩家加入和离开 - 游戏可以达到允许的最大玩家数量

此更改从所有 GameServers 传播回 Master 但它不会传播到所有 GameServers,这意味着一旦进入房间,您的客户端就无法使用它。

选项

这里有一个关于此主题的更长线程: http://forum.exitgames.com/viewtopic.php?f=17&t=3093

讨论的要点是:

  • 如果您使用的是自托管版本 Photon(不是 Photon Cloud),您可以扩展负载平衡。
  • 您可以连接第二个对等节点并将其连接到主节点,但缺点是它被算作第二个 ccu,这可能是您的成本问题,因为它全部基于 ccu。

游戏列表的缺点

一般来说,在游戏中使用游戏列表作为设计组件往往被高估了 - 这是在开发过程中进行匹配的一种简单方法,但在上线时效果不佳(对于大多数游戏)。

玩家通常不关心并匹配基于过滤器的游戏(不需要游戏列表,因为光子支持过滤器匹配),通常导致玩家选择列表中的第一个游戏。在负载下,这通常意味着许多玩家试图加入同一个游戏,这通常是一个问题,因为大多数游戏都需要某种最大玩家数。 顺便说一句:如果他们经常关心它 "I wan't to play with a friend",这也得到了光子匹配的支持。

如果您有移动客户端,游戏列表可能是一个负担,特别是对于非常活跃的游戏,加载列表需要时间,并且它使用带宽来加载和维护它们。由于延迟,玩家也更有可能 select 已经满员的游戏。

您可以通过创建 PhotonNetwork 的第二个实例并将其连接到托管游戏的所述服务器,并让此实例成为一个游戏对象,该对象也与拥有您的大厅的对象对话脚本。不确定这是否有效或实施起来有多困难。我目前正在与 Photon 合作。