【问题标题】:Peer to Peer Game Networking点对点游戏网络
【发布时间】:2015-04-08 03:02:02
【问题描述】:

我做了一个游戏,大致实现了P2P网络。我目前每 20 秒发送一次数据包。目前我为每个 NPC 发送一个数据包,告诉客户端其当前位置,所以如果我有 20 个 NPC,则每 20 秒发送 20 个数据包。

我的问题是我是否应该每 20 秒发送一个包含所有当前 NPCS 位置的数据包?如果是这样,这个数据包应该有最大大小吗?并且欢迎任何关于游戏点对点网络的资源。

【问题讨论】:

  • 很好奇,您甚至使用 P2P 还是这只是服务器-客户端设置?每个客户端是否在此时间范围内向所有其他客户端发送状态?无论哪种方式,我认为您不应该在数据包层上进行操作,让 TCP/IP 来处理。最好尝试尽可能多地打包在一起,并让网络堆栈在必要时将其分解为单独的步伐。一般来说,我建议对现有软件进行一些研究,以帮助您实现一些较低级别的 p2p 功能。
  • 我有一个主机,它向客户端发送有关 NPCS、碰撞及其发射的子弹的信息。客户端向主机发送有关其发射的子弹及其位置和速度的信息。也只有两个玩家。
  • 明白了。这听起来像是一种服务器-客户端架构,而不是 p2p(点对点),后者是完全不同的动物。您会希望保持有效负载相对较小,特别是如果您每秒发射几个,但测试/分析是确定“正确”数据包大小的唯一方法。我能给您的最佳建议是将每次点击时发送的数据保持在最低限度。如果 NPC 位置比其他一些信息(分数更新等)更重要,那么您会希望它们更频繁地发生。尽可能保存

标签: p2p


【解决方案1】:

这取决于您使用的协议是 UDP 还是 TCP。在游戏中,尤其是 FPS 中,UDP 往往是首选协议,因为它比 TCP 更“健谈”。代价是 UDP 可能会丢失数据包,因为无法保证交付。

考虑到这一点,您应该在每个数据包中发送所有位置数据。这样,如果您在这里或那里丢失了一个数据包,游戏可以继续进行,并且您将大部分时间被同步。

对于数据包大小,使其尽可能小。您绝对希望避免一次更新需要多个数据包,尤其是使用 UDP。您的数据集听起来并不大,但我只是在猜测。

【讨论】:

  • 我正在使用 UDP,我发送的每个移动数据包都包含 5 个浮点数和一个无符号整数。我一直在阅读有关 P2P 的文章,但他们并没有真正回答我提出的问题。您认为大数据包是什么?
  • 查看此 SO 帖子:stackoverflow.com/questions/1098897 它建议最大 UDP 有效负载为 512 字节,并由许多具有较高 SO 声誉的成员提供支持。 (我几乎建议使用 256,但我意识到这是 90 后的数字,于是转而使用 Google :-)
  • @Student123:还可以查看这篇深入介绍 MTU 的 Wikipedia 文章:en.wikipedia.org/wiki/Maximum_transmission_unit 这是对我与上一条评论链接的 SO 帖子中提出的建议/答案的良好备份。
  • 非常感谢,这应该非常适合我的需要!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
相关资源
最近更新 更多