2012-04-17 132 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準則一致。他們的行爲幾乎和你描述的完全一樣。

相關問題