【问题标题】:Optimizing 4 player peer-to-peer network topology优化 4 玩家对等网络拓扑
【发布时间】: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


    【解决方案1】:

    对于一个描述性很强且写得很好的问题的简短回答,我很抱歉,但答案很简单。服务器(您使用了术语“主机”,但这令人困惑)不必向每个客户端发送 3 条单独的消息。服务器收集所有信息并仅向每个客户端发送一条包含所有信息的消息。

    【讨论】:

    • 2 个问题:1) 单条消息不会变得更大。这比发送一系列较小的数据包更好吗? 2)对于行动信息呢? IE。玩家会做一些类似射击或治疗等的事情。我真的无法收集这样的东西。如果您没有足够的空间,可以引用此内容并在您的回答中回复。
    • 1) 在大多数情况下,是的,这样会更好。想想发送每条消息所涉及的开销。 2) 抱歉,我不明白为什么不呢?
    • 位置每 x 秒发送一次,因此我可以简单地让服务器向每个客户端发送所有位置的单个消息。但是动作可以随时进来,没有间隔。并且有许多不同类型的动作。我想服务器可以“监听”并收集每个玩家发送的动作,然后向每个客户端发送一个组合数据包。但是监听窗口必须非常小以防止延迟,除非 2 名玩家同时发送动作,否则无法进行收集。除非你能想出更好的解决方案?谢谢。
    • 好的,请考虑一下这个场景。假设没有带宽问题,如果玩家 A、B 和 C 之间的延迟都是 20ms,而 D 和其他玩家之间的延迟是 200ms,那么在 Peer-to-Peer 拓扑中你会如何处理呢?我的意思是,您描述的问题实际上是所有网络编程中存在的通用问题,无论使用何种拓扑。
    • 我得到的是并非所有消息都可以像位置一样组合。我现在看到位置消息可以毫无后果地从客户端服务器中受益。但不幸的是,我的操作类型消息不会。
    猜你喜欢
    • 2020-12-18
    • 2014-10-14
    • 2011-03-31
    • 2011-05-08
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 2013-07-23
    • 2012-05-31
    相关资源
    最近更新 更多