避免iPhone不断轮询网络服务?

时间:2009-09-24 07:59:54

标签: iphone objective-c web-services json

我有一个iPhone应用程序需要在对服务器进行更改后立即更新。如何让服务器“推送”数据到iphone而不是iphone不断轮询网络服务?

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

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

4 个答案:

答案 0 :(得分:13)

这取决于你是多么冒险。这里有两种选择:

  1. Apple's Push Notifications即使您的应用未运行也会有效。
  2. 自己维护与服务器的TCP连接。这需要你做更多的编程工作 - 低级别的NSStream杂耍,并试图处理iPhone决定从3G到WiFi的情况。这也可以很快耗尽电池。如果您选择此路径,socket streams programming guide可能是开始的好地方。
  3. 更新:看看iStreamLight - Lightstreamer protocol implementation for iPhone。如果它不适合您的Comet Web服务,您可能需要转到较低级别,即使用套接字流维护TCP连接。为了简化处理JSON数据结构的任务,您可能希望使用JSON framework for Objective-C

答案 1 :(得分:3)

您需要的是某种COMET框架(例如光流)。有几种方法可以做到这一点 - 套接字连接或HTTP服务器保留在您的民意调查中,直到有一些数据可供传递或HTTP请求超时。其他选项包括使用像Flash或Silverlight / Moonlight这样的插件(假设在iphone上使用monotouch可以实现这样的功能吗?)

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

答案 2 :(得分:1)

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

老实说,我希望自己能提供更多帮助。如果你想在javascript中找到一种方法,我会全身心投入!

祝你好运,

-Todd

答案 3 :(得分:0)

对于Web服务推送,又名Comet,您可能想要查看其他StackOverflow问题here.