1

原始问题: iOS 开发人员库在 Game Kit Programming Guide 中提到

客户端-服务器游戏的最大规模为 16 名玩家。

此限制是否也适用于 P2P GKsessions?

这已经在这里问过了(但从不同的角度)。

更新的问题:当连接超过 4 个对等点时,GKSession 是否可靠?

注意:问题已根据下面saulobrito的回复进行了更新。

参考:使用大量连接的对等点的应用程序的一个示例是Seedio。您会注意到他们没有使用 GKSession,因为蓝牙不是连接选项(使用 GKSession,您甚至无法选择蓝牙或 wi-fi .. GKSession 会为您做到这一点。)查看他们的常见问题解答以获取一些有趣的信息为什么他们选择 Wi-fi 而不是蓝牙。

4

2 回答 2

3

我可以向你保证的是 GKSession 非常不稳定,你不应该相信这些文档。事实上,Apple 最近决定完全删除文档。

我做了很多测试,我建议实际限制是 4 个连接的设备(一个充当服务器和 3 个客户端)。当然,最好是自己做测试场景。

我也找不到任何允许超过 4 名玩家的游戏。我唯一知道的是苹果自己的德州扑克——它允许 8 名玩家,但他们决定删除它。

最后但并非最不重要的一点是,Game Center对P2P游戏施加了 4 名玩家限制。

是的,我正在开发一款应支持 10 名玩家的游戏,但在我们的测试中,当设备超过 4 台时,它变得不稳定/无法使用。我所说的不稳定是指:有时您找不到对等点,并且连接会在不到一分钟的时间内断开。更糟糕的是,更新到 iOS 6 带来了一些奇怪的行为,例如在尝试发送消息时冻结(没有错误、没有堆栈跟踪、没有任何内容)。其他奇怪的事情:当一个玩家失去连接时,所有其他玩家都会断开连接。

编辑:自该响应以来进行了大量测试,并有更多信息可以分享:

使用 iOS 6,我可以在 9 台设备上使用 wi-fi 或 bluetooth 可靠地播放。但是仍然存在一个大问题:您无法将使用 iOS 6 的设备与使用 iOS 5 的设备连接起来,因为如果任何设备启用了 Wi-Fi,您将不时面临无法解释的冻结和无堆栈跟踪. 您可以将 iOS 6 设置为应用程序的最低支持版本,或者您将不得不要求用户禁用他们的 wi-fi 并使用蓝牙。

于 2012-10-22T14:59:05.267 回答
3

在 iOS 6.0 上,我可以确认 GKSession 至少允许 6 个玩家。我发现您必须确保在状态更改为已连接之前不要向对等方发送消息。

总的来说,我认为 GKSession 是一个美妙而简单的 API。它将使用蓝牙或 WiFi,这意味着您甚至不必考虑手机是否连接到 WiFi 网络。延迟很好而且很低(我测量它在 4ms 是不可靠的,在 10ms 左右是可靠的网络)。

我的主要警告是:

  1. 如果可以,请使用不可靠的消息传递。
  2. 确保在应用程序退出时将 .available 设置为 NO(如果您在广告期间被终止,您可能会打开虚拟会话)。
  3. 在相关对等方更改为已连接状态之前,请勿尝试向对等方发送消息。
  4. 断开连接后,请勿尝试重新使用 gksession。
  5. 您可能需要重试连接尝试(如果连接尝试失败,我会自动重试 3 次)。我的超时时间是 10 秒。
  6. 限制您的可靠消息传递。我还没有完全弄清楚限制是什么,但最终看起来你会破坏一个传输缓冲区,然后你的延迟就会膨胀。同样,当您使用不可靠的消息传递时,这不是问题。
于 2012-12-14T22:32:53.103 回答