Ios 优化4播放器对等网络拓扑

Ios 优化4播放器对等网络拓扑,ios,networking,sprite-kit,multiplayer,gamekit,Ios,Networking,Sprite Kit,Multiplayer,Gamekit,我正在开发一个使用精灵工具包和游戏工具包的实时游戏。该游戏采用多人模式,4名玩家可以相互玩。我一直在阅读《游戏工具包编程指南》,发现了以下段落: 尽管GKMatch对象创建了完整的对等连接 在所有参与者之间,您可以通过 将环或客户机-服务器网络体系结构分层到其上。 图8-1显示了四播放器的三种可能的网络拓扑 游戏在左边,一个点对点游戏在两个节点之间有12个连接 各种装置。但是,您可以将客户机-服务器体系结构分层 最重要的是指定其中一台设备作为主机。如果 您的游戏仅向主机传输或从主机传输,您可以将

我正在开发一个使用精灵工具包和游戏工具包的实时游戏。该游戏采用多人模式,4名玩家可以相互玩。我一直在阅读《游戏工具包编程指南》,发现了以下段落:

尽管GKMatch对象创建了完整的对等连接 在所有参与者之间,您可以通过 将环或客户机-服务器网络体系结构分层到其上。 图8-1显示了四播放器的三种可能的网络拓扑 游戏在左边,一个点对点游戏在两个节点之间有12个连接 各种装置。但是,您可以将客户机-服务器体系结构分层 最重要的是指定其中一台设备作为主机。如果 您的游戏仅向主机传输或从主机传输,您可以将数字减半 连接的数量。环形体系结构允许设备转发网络 数据包只发送到下一个设备,但进一步减少了 连接。每个拓扑提供不同的性能 特性,所以您需要测试不同的模型以找到一个 这提供了游戏所需的性能

这就是我困惑的地方。目前在我的游戏中,我已经实现了点对点拓扑,每个用户都会将他们的位置发送给游戏中的其他玩家。最终总共发送了12条消息,因为每个玩家发送3条消息

然而,根据文档,如果我在游戏上分层客户机-服务器拓扑,我可以通过减少连接数量来减少网络流量。如果我这样做,那么每个客户机将向主机发送他们的位置,然后主机将需要将这些位置转发给其余的客户机。因此,现在一个播放器(主机)需要额外工作,因为客户端不再相互通信。然后我们仍然会收到12条信息。主机发送9条消息(每个玩家3条消息,加上6条转发其他客户端位置的消息),然后每个客户端向主机发送1条位置消息。9+1+1+1=12条消息。这是有道理的,我们所做的只是不均匀地发送消息,所以现在一名球员需要更加努力地弥补其他球员所做的较少的工作

此外,中继客户端消息需要额外的时间,因为每个客户端的位置现在都需要通过主机

因此,虽然现在连接减少了,但一个玩家发送更多消息(9条消息),而不是每个玩家平均分配工作负载(即每个玩家发送3条消息)。这似乎会导致更大的断开机会,因为主机更容易断开与比赛的连接


那么,有人能向我解释一下,通过分层客户机-服务器拓扑结构,网络流量是如何减少的吗?即使整体消息相同,比赛中连接较少的事实是否会减少网络流量?请记住,这里没有专用的服务器,我(和文档)所说的是在对等匹配的基础上分层客户机-服务器拓扑。主持人也不是更容易断开连接,因为他发送的信息是其他玩家的3倍。毕竟,在短暂的数据包丢失后,比赛将断开玩家的连接。或者仅仅是拥有12个连接就有更大的机会因为假定的流量增加而断开连接吗

很抱歉,我对一个描述性很强、写得很好的问题给出了非常简短的回答,但答案很简单。服务器(您使用了术语“主机”,但这很混乱)不必向每个客户端发送3条单独的消息。服务器收集所有信息,只向每个客户端发送一条包含所有信息的消息。

2个问题:1)单个消息不会变大吗。这比发送一系列更小的数据包更好吗?2) 那么行动信息呢。也就是说,玩家做了一些类似射击或治疗等的事情。。像这样的东西我真的收不到。如果你没有足够的空间,也许可以引用这句话,并在你的回答中作出回应。1)在大多数情况下,是的,这样更好。考虑发送每条消息所涉及的开销。2) 抱歉,我不明白为什么不可以?位置每x秒发送一次,因此我可以让服务器向每个客户端发送一条包含所有位置的消息。但是行动可以在任何时候出现,没有时间间隔。有许多不同类型的行为。我认为服务器可以“监听”并收集每个玩家发送的操作,然后向每个客户端发送一个组合数据包。但是倾听的窗口必须非常小,以防止延迟,除非两个玩家同时发出一个动作,否则不可能进行收集。除非你能想出更好的解决办法?谢谢。好的,请考虑一下这个场景。假设没有带宽问题,如果播放器A、B和C之间的延迟都是20ms,而D和其他播放器之间的延迟是200ms,那么在对等拓扑中您将如何处理这个问题?我的意思是,您所描述的问题实际上是一个普遍的问题,存在于所有网络编程中,而不管所使用的拓扑结构如何。我的意思是,并非所有消息都可以像位置一样组合。我现在明白了位置消息可以从客户机服务器中毫无后果地获益。但不幸的是,我的动作类型消息不会。