首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone mmorpg中的高延迟

iPhone mmorpg中的高延迟
EN

Stack Overflow用户
提问于 2010-02-12 15:10:43
回答 3查看 1.4K关注 0票数 1

现在,我正在尝试为iPhone制作一个mmorpg。我对它进行了设置,以便iPhone每秒多次请求球员的位置。它是这样做的:客户端使用异步NSURLConnection向php页面发送一个请求,该页面从mysql数据库加载位置并以json格式返回。然而,从请求位置到实际加载位置大约需要.5秒。这似乎真的很高,有什么明显的事情可能会导致这种情况吗?

此外,这也会导致客户端上的球员移动非常不稳定。有没有什么算法或方法可以减少玩家移动的波动性?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-12 18:06:40

当您在iPhone之外运行数据库查询时,开始测量它需要多长时间。

然后测量当你从iPhone之外的其他地方发送相同的http请求需要多长时间(例如,一个10-15行的c#程序就能解决这个问题)。

如果以上都没有显示出任何明显的延迟,则需要在iPhone端进行改进。一些需要注意的事情:

  • GPRS/3G具有相当高的延迟

tcp GPRS/3g有相当高的误码率-这意味着会有相当多的数据包被丢弃,这会导致重新传输,你会遇到更高的延迟

  • 超文本传输协议有很多开销。

  • JSON增加了很多开销。

也许你需要为你的消息想出一种紧凑的二进制格式,并放弃超文本传输协议,取而代之的是一种定制的协议--甚至可以恢复到UDP

上述要点通常不适用,但如果您需要在高延迟、低带宽、不稳定的连接上提供流畅的体验,则它们适用。

TCP

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

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

你知道玩家移动的方向,如果它不总是恒定的,你可以推导出速度-这意味着你可以随着时间的推移插入并猜测他的新位置,当你查询实际位置时调整屏幕上的位置,并在得到查询响应时调整回实际位置。诀窍是始终在特定的边界内随时间进行插值。如果您的预测与查询返回的结果相比有一点偏差,不要立即将位置恢复到实际位置。在几个帧上进行当前位置和所需位置之间的插值。

票数 4
EN

Stack Overflow用户

发布于 2010-02-12 15:30:10

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

此外,不要为每次更新都发出新的HTTP请求。如果你根本不需要使用HTTP,那就更好了,因为它确实不适合实时通信。

GPRS的ping时间通常为600ms,3G的ping时间为300ms,HSPA的ping时间为100ms。查看正在使用的模式。请注意,一些设备(我不知道iPhone)在没有足够的流量来证明更快模式的合理性时,出于省电的原因从高速is切换到常规3G。

至于位置,一种相当常见的做法是应用线性预测,即使角色以当前速度在当前方向上继续移动,即使还没有来自服务器的数据。

最重要的是: benchmark/profile,看看延迟在哪里。是您的服务器、网络连接还是应用程序。

票数 3
EN

Stack Overflow用户

发布于 2010-02-12 15:36:58

加载球员的位置,快速有缺点。

  • It破坏了您的服务器。
  • 3G实际上并不是为了支持低延迟应用程序

所以我不认为mmorpg在这个时候没有一些必要的捷径,比如根据它们的速度和位置来外推路径。加载位置不会像你想要的那样快,特别是在基于PHP的服务器上。

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

如果不是用一种更快的语言,比如C++,我也可能会重新实现一些更关键的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2250183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档