【问题标题】:Avoid iPhone constant polling a web-service?避免 iPhone 不断轮询 Web 服务?
【发布时间】:2009-09-24 07:59:54
【问题描述】:

我有一个 iPhone 应用程序,一旦对服务器进行更改,它就需要更新。如何让服务器将数据“推送”到 iphone,而不是让 iphone 不断轮询 Web 服务?

编辑:我希望 iPhone 在服务器处理它们后立即接收 JSON 更新,而无需请求。

我想由于服务器是一个称为 Comet 的 Web 服务,但我还没有看到一个好的 iPhone 示例。

【问题讨论】:

  • 我会认真考虑您是否需要这样做。保持与服务器的开放连接以实时接收更新 - 从而保持手机上的无线电不断活跃 - 会像疯了一样消耗电力。

标签: iphone objective-c web-services json


【解决方案1】:

这取决于你的冒险精神。这里有两种选择:

  1. Apple's Push Notifications 即使在您的应用未运行时也可以使用。
  2. 自己维护与服务器的 TCP 连接。这需要您进行更多的编程工作 - 当 iPhone 决定从 3G 转为 WiFi 时,低级 NSStream 杂耍并尝试处理案例。这也可以很快耗尽电池。如果您选择这条路,socket streams programming guide 可能是一个不错的起点。

更新:看看iStreamLight - Lightstreamer protocol implementation for iPhone。如果它不适合您的 Comet Web 服务,您可能需要进入较低级别,即使用套接字流维护 TCP 连接。为了简化处理 JSON 数据结构的任务,您可能需要使用 JSON framework for Objective-C

【讨论】:

  • 我的意思是,如果我有一个网络服务,iPhone 需要从中获取数据,我需要使用 Comet 吗?但是如何在不使用 Javascript 库的情况下做到这一点呢?
  • 不,您不需要 JavaScript。彗星只是一个想法。最简单的实现是一个 NSURLConnection ,它有很长的超时时间,异步运行或在非 UI 线程中运行。连接应该保持打开,直到服务器有数据,在这种情况下,它应该发送数据并关闭连接,你会得到它。然后立即打开与服务器的新连接并开始等待。
  • @SidneySM:实际上,您不必在获取数据并打开另一个数据后关闭连接。太消耗资源了。您收到数据块,对其进行处理(假设它是完整的序列化 JSON 数据结构),然后等待另一个数据。当然,你最好还是在一段时间后关闭连接并打开一个新的,以避免内存泄漏
【解决方案2】:

您需要的是某种 COMET 框架(例如 light-streamer)。有几种方法可以做到这一点 - 套接字连接或 HTTP 服务器会保留您的轮询,直到有一些数据可供传递或 HTTP 请求超时。其他选项包括使用 Flash 或 Silverlight/Moonlight 等插件(假设这样的事情在 iphone 上使用 monotouch 是可能的?)

Frozen Mountain 的 WebSync 是一个新的(基于 IIS 的)COMET 框架,它可以以非常高效的方式移动大量数据,它支持托管的基于 COMET 的 PubSub 框架(称为 WebSync on Demand),可以扩展以适应您的需求加载。它可以通过 Javascript 很好地工作,并且有一个非常干净的 API。

【讨论】:

  • 到目前为止,我对 WebSync(一直使用他们的服务器快速版本,而不是按需)软件印象深刻。目前文档有点薄,但他们监控他们的 google 群组社区,因此我从来没有真正需要等待超过几个小时才能得到对问题的答复。
【解决方案3】:

这可能已经在其他帖子中提到过,但http://code.google.com/p/istreamlight/ 是一个查看的好地方。它使用 lightstreamer 服务器(不知道)。您可以看看这是否是您希望为您的应用程序实现彗星客户端的方式。

我真的希望我能提供更多帮助。如果您要在 javascript 中执行此操作,我会全力以赴!

祝你好运,

-托德

【讨论】:

  • 是的,在 JS 中执行此操作有大量信息。谢谢你的链接,我会调查的。
【解决方案4】:

对于 Web 服务 Push,又名 Comet,您可能需要查看另一个 StackOverflow 问题 here.

【讨论】:

    猜你喜欢
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多