【发布时间】:2015-04-21 23:41:06
【问题描述】:
我正在使用 Sprite Kit 和 Game Kit 开发一款实时游戏。游戏采用多人模式,4名玩家可以互相玩。我一直在阅读 Game Kit 编程指南并看到以下段落:
虽然 GKMatch 对象创建了一个完整的点对点连接 在所有参与者之间,您可以通过以下方式减少网络流量 在其上分层一个环或客户端-服务器网络架构。 图 8-1 显示了四人游戏的三种可能的网络拓扑 游戏。在左边,一个点对点游戏有 12 个连接 各种设备。但是,您可以将客户端-服务器架构分层 最重要的是,通过提名其中一台设备充当主机。如果 您的游戏仅向主机传输或从主机传输,您可以将数量减半 的连接。环形架构允许设备转发网络 数据包只到下一个设备,但进一步减少了 连接。每种拓扑提供不同的性能 特征,因此您将需要测试不同的模型以找到一个 提供您的游戏所需的性能。
所以这就是我感到困惑的地方。目前在我的游戏中,我已经实现了点对点拓扑,每个用户将他们的位置发送给游戏中的每个其他玩家。这最终总共发送了 12 条消息,因为每个玩家发送 3 条消息。
但是,根据文档,如果我在游戏上分层一个客户端-服务器拓扑,我可以通过减少连接数来减少网络流量。如果我这样做,那么每个客户端都会将他们的位置发送给主机,然后主机需要将这些位置转发给其余的客户端。所以现在一个玩家(主机)需要额外工作,因为客户端不再相互通信。然后我们仍然收到 12 条消息。主机发送 9 条消息(每个玩家 3 条消息,加上 6 条用于中继其他客户端位置的消息)然后每个客户端向主机发送 1 条位置消息。 9 + 1 + 1 + 1 = 12 条消息。这是有道理的,我们所做的只是不均匀地分配消息发送,所以现在一个玩家需要更加努力地弥补其他玩家所做的工作越少。
此外,中继客户端消息需要额外的时间,因为现在每个客户端的位置都需要通过主机。
因此,虽然现在连接较少,但一个玩家发送的消息更多(9 条消息),而不是每个玩家平均分配工作量(即每个玩家发送 3 条消息)。这似乎会导致发生断开连接的机会更大,因为主机更容易从比赛中断开连接。
那么有人可以向我解释如何通过分层客户端-服务器拓扑来减少网络流量吗?即使整体消息相同,匹配中连接较少的事实是否会减少网络流量?请记住,这里没有专用服务器,我(和文档)正在谈论在对等匹配之上分层客户端-服务器拓扑。主持人也不是更有可能断开连接,因为他发送的消息是其他玩家的 3 倍。毕竟,GKMatch 会在短暂的丢包后断开播放器的连接。或者仅仅是因为流量增加而导致有 12 个连接的事实更有可能断开连接?
【问题讨论】:
标签: ios networking sprite-kit multiplayer gamekit