2

您认为 Twisted Spread 是否适合(在性能方面)多人赛车模拟器?该应用程序的其余部分基于 Python-Ogre。

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

4

2 回答 2

5

几乎可以肯定,这是一个合理的协议。记住优化的基本规则:不要这样做。使用任何基于 TCP 的协议将比使用任何基于 UDP 的协议容易得多。与在客户端和服务器之间发送消息是否需要 30 毫秒或 45 毫秒相比,这对于项目的成功而言最初要重要得多。最终,当您清楚地知道您的项目实际上可能会成功并且您确实需要弥补这 15 毫秒(或许多)时,您可以重新访问网络层并考虑是否存在性能瓶颈(可能是延迟)或其他一些指标)是由于您选择的协议。如果是这样,那就是花时间评估各种替代方案的时候了。它'显着提高了对问题的理解,并且应该非常具体地确定了您的要求,另外两件事将使选择适当协议(无论是基于 TCP 还是基于 UDP)的任务变得更加容易并且更有可能是正确的。

于 2009-11-14T02:10:43.277 回答
3

对于您的第一个问题,是的,PB 的性能完全可以满足实时游戏的需求。已经使用 PB 编写了几款游戏。例如,MV3D使用 Twisted 和 Python-OGRE 来呈现共享的物理模拟。

对于您的第二个问题,PB 在面向流的传输上运行。它可以在“可靠的 UDP”之上运行,使用与顶点一起提供的PTCP模块。

但是,您应该知道“可靠的 UDP”通常会比普通的旧 TCP性能差得多。互联网上的路由器都了解 TCP,并且可以通过使用这种了解来优化它。如果您在 UDP 之上实现可靠性,则必然需要在功能上实现与 TCP 等效的东西,然后有几个因素会影响您:

  • 您的可靠性实现必须在您的应用程序中运行,而不是在操作系统内核中。
  • 您的 TCP 实现必须与 TCP 做所有相同的事情,否则您将在意料之外的网络环境中遇到神秘的错误。
  • 沿途的路由器无法针对您的自定义可靠性层进行优化

在某些情况下,可以使 UDP “更快”的是由于不可靠而放弃了 TCP 所做的大部分工作。如果您的消息传递层不可靠,那么您必须知道它传递的数据可以被任意丢弃。

通常,适合在游戏中通过 UDP 传输的数据是运动数据。当你的位置发生变化时,你可以发送一个 UDP 数据包,它可以被丢弃,因为游戏只关心你最近的位置——一旦收到更新,之前的所有位置都无关紧要。如此多的游戏通过一个(不可靠的)UDP 通道发送运动数据,然后通过更可靠的 TCP 通道发送所有控制消息。

但是,Jean-Paul 关于优化的回答很好地表明了您何时可能要考虑实施该优化。

于 2012-09-17T00:18:38.323 回答