2012-03-23 70 views
1

我需要在我的iOS應用中實現項目的實時隊列。 (後來也是Android)。在iOS客戶端中實現實時隊列

主要用例是讓用戶看到所有用戶的實時共享隊列。可能有很多隊列,但目前用戶一次只能看到一個隊列。 如果一個用戶從隊列中刪除項目,則查看同一隊列的iOS應用的所有其他用戶都應實時查看隊列更新。如果我的服務器檢測到某個新項目已添加到特定隊列中,則應該將其推送給實時查看該隊列的所有其他客戶端。

實現這種機制的最佳方式是什麼?目前只支持iOS,但它應該是一個簡單的解決方案,以便稍後添加其他移動平臺不會是一件麻煩事。

我想有兩個主要選擇:

  1. 使用Web技術(JS & HTML5)(基本上呈現一個UIWebView)
  2. 生方式做了 - 使用蘋果的推送通知或其他永久性連接選項。 (推送通知更好,如果我希望能夠提醒用戶隊列更改,即使應用程序處於後臺或上帝禁止關閉)

很明顯,我也可以選擇混合解決方案。

我熟悉以下PUB-SUB解決方案:

1.Xmpp (extension to Xmpp would be more accurate) 
2.MQTT 
3.Pubnub - http://www.pubnub.com/ (pretty new out there) 
4. I read about Linked-in Kafka, but that seems way more advance and complicated to ny current needs. 

我很好奇聽到的話,任何人的任何論文或其他人的試驗,可以推薦一個,並說,如果本機或網絡是首選路徑。 所選擇的解決方案必須是易於使用且易於實施的產品,即使其成本有限。 (服務器端主要是用PHP編寫的,但node.js中是一個選項,以及)

感謝

+0

您的第一選擇是將隊列放在服務器上並讓它在那裏訪問,或者嘗試在所有用戶之間保持客戶端隊列的同步。部分決定取決於更新發生的頻率以及同步必須如何瞬時和精確。 – 2012-03-23 11:21:37

+0

隊列將由服務器維護,我想不出任何充分的理由,爲什麼我的iOS客戶端應負責將隊列狀態傳遞給所有連接並正在查看隊列的用戶,以及處理隊列狀態。除非我誤解了你所說的內容,我建議的是,服務器應該將所有訂閱者的隊列變化推送給他們。 – Idan 2012-03-23 11:45:02

+0

然後,您應該只需按一下「已更改」通知,讓您的客戶回來並刷新隊列的「視圖」。你也許可以推一個限定詞來「改變」,這樣客戶就知道特定的改變是否對他們的需求是「重要的」,但這就跟我一樣。處理推送的三種方法是推送通知(可能是最佳選擇),打開「獲取」和輪詢。 – 2012-03-23 15:45:00

回答

0

要更新的移動客戶端(或任何類型的客戶端)的有關服務器端隊列的狀態(或任何類型的數據系統/結構,RDBMS,No-SQL,文件等),您可以使用PubNub

您的客戶將訂閱名爲queue-status的頻道(將其命名爲任何您喜歡的名稱)。無論何時,當任何客戶端或服務器端進程更新隊列時,如果成功提交更改,則會將更改/狀態發佈到queue-status頻道,並且所有積極訂閱的客戶端都將獲得< 1/4的更新,無論有多少客戶或他們所在的世界上的哪個地方。

如果客戶端應用程序在該頻道上註冊了APNS(推送通知),並且該應用程序未運行或不在前臺,則客戶端設備將收到該推送通知。使用PubNub PHP SDK for your server side to publish the messagesPubNub iOS SDK to subscribe to receive the messages

並且不要忘記使用PubNub Access Manager to lock down access to your channels