【问题标题】:How fast can Android device call REST web service?Android 设备调用 REST Web 服务的速度有多快?
【发布时间】:2012-03-07 16:29:11
【问题描述】:

我正在尝试设计一款具有持久虚拟世界的多人安卓游戏。我有一个带有数据库的服务器,该数据库代表世界的当前状态以及一些公开的 Web 服务。我有一个 android 应用程序,它可以绘制特定玩家的世界视图,并向服务器发出 http 调用以获取玩家的当前状态(并相应地更新 android 的视图)。

到目前为止,我的计划是让应用程序在应用程序处于活动状态时不断轮询服务器(当用户不玩时无需轮询)。我想知道我应该能够以多快的速度轮询我的网络服务并更新手机。我希望游戏能够响应并与虚拟世界中的其他玩家同步。此外,对服务器必须处理的负载有什么想法吗?这会是瓶颈吗?

感谢您的帮助!如果我能澄清任何事情,请告诉我。

【问题讨论】:

  • 取决于……很多事情。

标签: android web-services rest android-asynctask


【解决方案1】:

与速度有关的因素很多,例如连接性 (wifi/3g/4g/hsdpa) 或服务器响应时间。或者如果用户偏执并构建了法拉第笼。这些只是几种可能性。您只需要通过性能增强和错误处理尽最大努力(但我会设法避免早期优化问题)。

您可以查看一些简单的事情,例如使用 JSON 而不是 XML,因为它的大小更小,甚至可以使用压缩。

我会争辩说,虽然我从未这样做过,但您可以使用 UDP,但这取决于您是否 100% 需要数据包才能到达。据我了解,TCP 试图确保数据包的传递,但因此速度较慢。例如,如果这是某种 FPS,我会使用 UDP,但如果它是基于回合的,那么 TCP 就可以了。

可在此处找到 UDP 示例教程:http://www.helloandroid.com/tutorials/simple-udp-communication-example

如果您想进行轮询,请确保异步进行,因为您不希望在主线程中发生这种情况。您可以使用 AlarmManager,因为不需要服务,尽管正如您所说的“用户不玩时无需轮询”,您可以实现自己的设置

这里有一些 Alarm 和 AsyncTask 教程的链接:

【讨论】:

  • 感谢您的详细回复。我还没有研究过 UDP——虽然我认为考虑到我的游戏设计,我可能只使用 TCP 就可以逃脱(尽管游戏并不是真正的回合制)。此外,我已经实施了您的一些建议。 UI、物理(“实时”线程)和我的 Web 服务工作都在单独的线程上完成以提高性能。此外,我在我的 droid 2 (50-60 fps) 上获得了不错的 fps。游戏应该是相当轻量级的,而且我传输的数据非常小。
  • 对不起,FPS 我的意思是第一人称射击游戏只是作为一个例子。但是像射击游戏一样快速运行的游戏需要快速的网络连接。没有什么比因为“滞后”而头部中弹更糟糕的了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多