适合多人赛车模拟的Twisted Spread?

2 投票
2 回答
718 浏览
提问于 2025-04-15 15:59

你觉得Twisted Spread在性能方面适合用在一个多人赛车模拟器吗?这个应用的其他部分是基于Python-Ogre的。

Perspective Broker能在(可靠的)UDP上运行吗?

2 个回答

3

针对你的第一个问题,是的,PB的性能完全可以满足实时游戏的需求。实际上,有好几个游戏就是用PB开发的。例如,MV3D就使用了Twisted和Python-OGRE来展示一个共享的物理模拟。

至于你的第二个问题,PB是基于流式传输的。它可以在“可靠的UDP”上运行,使用像PTCP这样的模块,这个模块是和vertex一起提供的。

不过,你需要知道,“可靠的UDP”通常比传统的TCP性能要差很多。因为互联网上的路由器都懂TCP,并且可以利用这些知识来优化它。如果你在UDP上实现可靠性,实际上你就得实现一个和TCP功能相似的东西,这样会有几个因素让你处于劣势:

  • 你的可靠性实现必须在你的应用程序内部运行,而不是在操作系统的核心部分。
  • 你的TCP实现必须完成TCP所做的所有工作,否则在一些意想不到的网络环境中,你会遇到神秘的错误。
  • 沿途的路由器无法为你的自定义可靠性层进行优化。

UDP在某些情况下“更快”的原因是它可以省去TCP所做的大部分工作,因为它是不可靠的。如果你的消息传递层是不可靠的,那么你就得知道它传递的数据可能会被随意丢弃。

通常,在游戏中适合通过UDP传输的数据是位置信息。当你的位置发生变化时,你可以发送一个UDP数据包,而这个数据包可能会被丢弃,因为游戏只关心你最新的位置——一旦收到更新,之前的位置就不再重要。因此,很多游戏会通过一个(不可靠的)UDP通道发送位置信息,而通过一个更可靠的TCP通道发送所有控制消息。

不过,Jean-Paul关于优化的回答很好地说明了你可能需要考虑实现这种优化的时机。

5

这基本上是一个合理的协议,适合你开始使用。记住优化的基本原则:别急着优化。使用任何基于TCP的协议会比使用基于UDP的协议简单得多。这一点对你项目的成功来说,比起消息在客户端和服务器之间发送需要30毫秒还是45毫秒要重要得多。等到你项目看起来真的有希望成功的时候,如果你发现需要缩短那15毫秒(或者更多),那时候再回过头来看看网络层,考虑一下性能瓶颈(无论是延迟还是其他指标)是不是因为你选择的协议。如果是,那时候再花时间评估各种替代方案就合适了。只有在那个时候,选择理想协议的努力才可能会有回报(因为你离完成项目更近了),而且到那时你对问题的理解会有显著提升,需求也会更加明确,这两点都会让选择合适的协议(无论是基于TCP还是UDP)变得更简单,也更可能正确。

撰写回答