iPhone mmorpg的高延迟

时间:2010-02-12 07:10:43

标签: iphone latency multiplayer mmo

现在我正在尝试为iPhone制作mmorpg。我设置好了,以便iPhone每秒多次请求玩家位置。它是如何做到的,客户端使用异步NSURLConnection向php页面发送请求,该页面从mysql数据库加载位置并在json中返回。但是,从请求位置到实际加载时需要大约0.5秒。这看起来真的很高,有没有明显的事情可能导致这种情况?

此外,这会导致玩家在客户端上的移动也非常不稳定。是否有任何算法或方法可以减少玩家运动的波动?

3 个答案:

答案 0 :(得分:4)

开始测量在iPhone外部运行数据库查询所需的时间。

然后测量从iPhone以外的其他东西发送相同的http请求所需的时间(例如10-15行c#程序来计算出来)。

如果以上都没有显示出任何重大延迟,则需要在iPhone方面进行改进。需要注意的一些事项:

  • GPRS / 3G具有相当高的延迟
  • GPRS / 3G具有相当高的误码率 - 这意味着现在会有相当多的丢弃数据包,这将导致tcp重新传输,您将体验更高的延迟
  • HTTP有很多开销。
  • JSON增加了很多开销。

    也许你需要为你的消息提出一个紧凑的二进制格式,然后放弃HTTP以支持自定义协议 - 甚至可以恢复为UDP

以上几点通常不适用,但如果您需要提供高延迟,低带宽,片状连接的流畅体验,它们就会适用。

  • 至少,请确保您没有为每个请求设置新的TCP连接。你需要使用http keep-alive。

我没有关于玩家移动算法的任何具体信息,但经常使用的是某种移动预测。

你知道玩家移动的方向,如果速度并不总是恒定的话你可以得出速度 - 这意味着你可以随着时间插值并猜测他的新位置,在查询实际位置时调整屏幕位置,并在收到查询响应时调整回实际位置。 诀窍是始终在某些边界内插补。如果您的预测与查询返回的内容相比有点偏差,请不要立即将位置捕捉回实际位置。在少数帧上进行当前位置和所需位置之间的插值。

答案 1 :(得分:3)

在服务器端,您应该使用一些继续运行并始终保持数据库连接打开的系统。优选地,它也会缓存事物而不是始终从数据库中请求它们。

此外,不要为每次更新发出新的HTTP请求。最好不要使用HTTP,因为它实际上不适合实时通信。

GPRS通常具有600 ms的ping时间,3G具有300 ms并且HSPA具有100 ms。查看正在使用的模式。请注意,有些设备(我不知道iPhone)会因为没有足够的流量来证明更快的模式而从HSPA下降到常规3G以节省电力。

至于位置,一个相当普遍的做法是应用线性预测,即使角色在当前速度下以当前速度继续​​移动,即使没有来自服务器的数据可用。

最重要的是:基准/个人资料,以查看延迟的位置。它是您的服务器,网络连接还是应用程序。

答案 2 :(得分:1)

加载快速有缺点的玩家位置。

  • 它会破坏你的服务器。
  • 3G并不是真正意味着支持低延迟应用程序

所以我没有看到mmorpg在没有必要的快捷方式的情况下工作,例如根据速度和位置推断路径。加载位置将无法以您想要的速度运行,特别是对于基于PHP的服务器而言。

无论哪种方式,在开发移动平台时,您将不得不在功能方面做出牺牲而不是全功能的桌面实施。

如果不是整个服务器用更快的语言,我也可能重新实现一些更重要的东西,例如C ++。