2012-03-23 108 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