5

我正在考虑使用从 Android 应用程序到“云服务”的持久连接。这将一直在后台服务(或类似的服务)中运行。

我正在考虑使用网络插座或 XMPP 来保持连接,基本上是在寻找不会耗尽电池的轻量级连接。我希望能够将通知实时推送到此连接,因此不需要定期轮询。我知道 C2DM 和其他商业解决方案,但我希望推出自己的. 这就是为什么我正在研究网络套接字(或其他轻量级连接)的原因。所以如果我走这条路,我应该注意哪些最佳实践?

我在想类似的东西:

  1. 如何防止电池耗尽,
  2. 如何处理IP地址更改等?
4

2 回答 2

10

这可能不是您正在寻找的答案,但我认为您可能想要重新考虑您的架构。

您可以从移动平台中获得的东西

  • 您的 IP 地址随机更改
  • 您的物理互联网连接将随机丢失
  • 操作系统决定你不做任何有用的事情并杀死你的进程
  • 连接类型随机变化(从 WIFI 到 4G 到 3G 到边缘),因此您的 IP 会发生变化

基本上,您的应用程序需要能够处理连接丢失,因为它几乎肯定会发生。

话虽如此,这完全取决于您对实时的定义。如果您愿意不断检查是否仍有可行的连接,则可以将任何延迟控制在分钟范围内。但这会耗尽电池电量,您对此无能为力。

于 2012-06-21T16:32:40.067 回答
1

有些事情就是不能很好地结合在一起。那就是“实时推送通知”“防止电池耗尽”。你肯定要在这里做出妥协。

我只能建议尝试一些使用 XMPP 的 Android 应用程序,以了解它们如何处理持久连接、IP 地址更改和电池消耗。如果它们是开源的,您还可以查看代码并从中学习。Yaxim、Project MAXS 和 Beem 等等。也许你也应该看看XEP-0286: XMPP on Mobile Devices

也就是说,当 Google 为您提供 C2DM 时,您确定要重新发明轮子吗?针对此用例进行了优化。我认为它有一些延迟,所以它不是“实时”的。但同样,您最终会得到一个积极尝试建立持久连接并耗尽电池电量的解决方案,或者您将不得不忍受某种延迟(约 0-30 分钟)。

于 2012-06-21T23:58:42.173 回答