2009-09-24 107 views
6

我有一个iPhone应用程序,需要立即更新服务器进行更新。我怎样才能让服务器将数据“推送”到iPhone而不是iPhone不断地轮询Web服务?避免iPhone不断轮询Web服务?

编辑:我希望第一iPhone接收JSON更新,只要服务器处理它们,而不必请求。

我想因为服务器是一个web服务,这被称为彗星,但我还没有看到一个很好的iPhone例子。

+0

我会认真考虑是否需要这样做。保持与服务器的开放连接以实时接收更新 - 从而使手机上的收音机始终处于活动状态 - 将会像疯狂一样降低功耗。 – 2009-10-06 13:39:27

回答

13

这取决于你是如何的冒险。这里有两种选择:

  1. Apple's Push Notifications即使你的应用程序没有运行,它也能工作。
  2. 自己维护与服务器的TCP连接。这需要您进行更多的编程工作 - 当iPhone决定从3G转向WiFi时,底层的NSStream玩弄并试图处理案件。这也可以很快耗尽电池。如果你选择这条路,socket streams programming guide可以成为开始的好地方。

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

+0

当然这不是正确的回应。 – DevDevDev 2009-09-29 21:12:48

+0

由此我的意思是,如果我有一个Web服务的iPhone需要获取数据,我需要使用Comet?但是如何在不使用Javascript库的情况下做到这一点? – DevDevDev 2009-09-29 21:19:39

+1

不,你不需要JavaScript。彗星只是一个想法。最简单的实现是一个NSURLConnection,它具有异步运行的非常长的超时或在非UI线程中运行。连接应该保持打开状态,直到服务器有数据,在这种情况下,它应该发送数据并关闭连接,然后你就可以得到它。然后立即打开一个到服务器的新连接并开始等待。 – s4y 2009-10-06 15:56:02

0

对于Web服务,又名彗星可能要结帐这个其他的StackOverflow问题here.

1

这可能在其他职位已经提到,但http://code.google.com/p/istreamlight/是检查出来的好地方。它使用lightstreamer服务器(不知道这一点)。你可以看看这是否是你想为你的应用程序实现一个彗星客户端。

我真的希望我能更有帮助。如果你正在寻求一种方法来做到这一点在JavaScript中,我会完全!

祝你好运,

-Todd

+0

Yup tehre是在JS里做这个的大量信息。感谢您的链接,我会研究它。 – DevDevDev 2009-09-30 23:03:09

3

你需要的是某种COMET框架(如光缆)。有几种方法可以做到这一点 - 套接字连接或HTTP服务器,它们持有你的轮询,直到有一些数据可用于交付或直到HTTP请求超时。其他选项包括使用像Flash或Silverlight/Moonlight这样的插件(假设使用monodouch可以在iPhone上使用这样的插件?)

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

+0

迄今为止,WebSync(使用其服务器快速版本,而不是按需)软件给我留下了非常深刻的印象。目前这些文档只是一个小小的细节,但他们监控他们的谷歌社区,这样我就不用等上几个小时才能得到对问题的回应。 – Matt 2010-02-12 21:42:55