2012-04-17 124 views
0

我为我的应用程序创建了几个Web服务,如下所示。 1.允许主机设备将其信息发送到Web服务,并将其存储在SQL数据库中。 2.允许客户端设备根据sql数据库中的信息查看所有附近的设备。Web服务发送信息到iPhone

我希望客户端现在能够点击其中一个设备连接,然后以某种方式将两者连接在一起。我现在的问题是我的网络服务只能发送对设备请求的响应。我想要的是,如果主机设备可能按下一个按钮,它会将该信息发送到Web服务,该服务会将一些信息发送给先前连接的客户端。

我该如何完成从Web服务向未请求任何设备的设备发送信息?

背景信息: 我使用基于php的web服务和ASIHTTPRequest来发送和接收iphone端的信息。

回答

1

在99%的情况下,您将要使用轮询。想想任何获取消息的应用程序(电子邮件,与朋友交流,无论如何)。他们都打电话给服务器,问“有什么新消息给我?”你必须为你的应用找出正确的频率。

在极少数情况下,您需要近乎实时的通信,那么您需要设置您的应用程序作为服务器运行。看到这里:What classes do I use to make an iPhone act as a server?。很明显,电池和带宽的成本要高得多。

0

您可能会保持一个持续连接打开,但是当网络状况发生变化时(例如从网络移动到网络,开启/关闭蜂窝等)时,这种情况将会中断。

客户端可以快速轮询服务器,但这不仅会在服务器上产生高于预期的负载,而且更重要的是会烧毁客户端设备的电池。 (因为蜂窝无线电具有相当长的最短上电间隔,所以无论网络事务处理多么小,都是3G的两倍)。

如果您正在讨论相当零星的更新(实时更新真的需要上面的第一个选项,如果TCP会话被终止,则进行适当的错误处理和重新连接),您可能会考虑Apple Push Notifications - 前提是通知有效负载与APNS准则一致。他们的行为几乎和你描述的完全一样。