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

Optimizing 4 player peer-to-peer network topology

我正在使用 Sprite Kit 和 Game Kit 开发实时游戏。该游戏具有多人游戏模式,其中 4 名玩家可以互相玩。我一直在阅读 Game Kit 编程指南并看到以下段落:

Although the GKMatch object creates a full peer-to-peer connection between all the participants, you can reduce the network traffic by layering a ring or client-server networking architecture on top of it. Figure 8-1 shows three possible network topologies for a four-player game. On the left, a peer-to-peer game has 12 connections between the various devices. However, you could layer a client-server architecture on top of this by nominating one of the devices to act as the host. If your game transmits to or from the host only, you can halve the number of connections. A ring architecture allows devices to forward network packets to the next device only, but further reduces the number of connections. Each topology provides different performance characteristics, so you will want to test different models to find one that provides the performance your game requires.

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

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

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

因此,虽然现在连接较少,但一个玩家正在发送更多消息(9 条消息),而不是每个玩家平均分配工作量(即每个玩家发送 3 条消息)。这似乎会导致断开连接的可能性更大,因为主机更容易从匹配中断开连接。

有人可以向我解释如何通过分层客户端-服务器拓扑来减少网络流量吗?即使整体消息相同,匹配中连接较少这一事实是否会减少网络流量?请记住,这里没有专用服务器,我(和文档)正在谈论在对等匹配之上分层客户端-服务器拓扑。主机断开连接的机会也不是更大,因为他发送的消息是其他玩家的 3 倍。毕竟,GKMatch 会在短暂的数据包丢失后断开播放器。或者仅仅因为假设流量增加而有 12 个连接的事实更有可能断开连接?

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