使用xmpp的实时通知

使用xmpp的实时通知,xmpp,push-notification,strophe,Xmpp,Push Notification,Strophe,我希望使用xmpp在我的应用程序中包含两个功能。第一个是一对一的聊天(使用strophe),几乎完成了,第二个是实时通知,就像在facebook上一样。我试图理解xmpp中的pubsub系统,但觉得它不适合这个特定的问题。如果错误,请更正,可能是因为没有正确理解概念。 我的要求是: 将有预定义的事件,任何用户都可以触发,当一个用户触发时,其他在线用户应收到相同的通知。此外,我还想检查用户是否希望在发送通知之前接收通知。这里我没有得到的是,如果要使用pubsub,节点在哪里以及如何适应。我可以只创

我希望使用xmpp在我的应用程序中包含两个功能。第一个是一对一的聊天(使用strophe),几乎完成了,第二个是实时通知,就像在facebook上一样。我试图理解xmpp中的pubsub系统,但觉得它不适合这个特定的问题。如果错误,请更正,可能是因为没有正确理解概念。 我的要求是: 将有预定义的事件,任何用户都可以触发,当一个用户触发时,其他在线用户应收到相同的通知。此外,我还想检查用户是否希望在发送通知之前接收通知。这里我没有得到的是,如果要使用pubsub,节点在哪里以及如何适应。我可以只创建一个其他人都将订阅的节点吗?在这种情况下,订阅服务器将如何在其上发布其事件而不成为节点所有者


我想到的另一种方法是,使用标题类型或额外的负载(比如
)将消息逐个发送给所有用户的JID,以区别于普通消息。考虑到可伸缩性,这种方法合适吗

PubSub可以工作,但是,您描述的内容更像是
MUC
(多用户聊天)

基本上,它创建了一个聊天室,您的访问者可以加入(可能不使用这种措辞),然后,当任何人向聊天室发送消息时,所有人都会收到它。您当然可以配置为只允许某些用户发布


由于您已经有一个客户端在浏览器上运行,使用Strophe,这应该相当容易。只需确保此MUC组件在您的服务器上运行。

您试图使用xmpphp库执行的操作,即在需要时向多个jid发送消息,这是pub-sub或MUC可以为您执行的操作:D因此,根据您的应用程序类型,您需要选择一种并继续使用xmpp进行试验,在您继续进行试验时,事情应该会变得很清楚……

要回答关于实时通知的第二个问题,您需要的是使用PEP而不是pubsub。这两个版本的主要区别在于,它只会发布给你花名册上的人,我想这是你想要的。此外,我认为PEP比pubsub或至少jabber.org更受广泛支持。PEP的唯一问题是它需要支持


我在博客上写过。例子是Java语言;希望您不要反对;-)

Pubsub将是这种情况的合适解决方案。据我所见,它能满足您的所有需求。如果希望用户以不同的方式订阅每种消息类型,则需要为每种事件类型设置一个节点(或者可以在单个节点上使用过滤器,但我认为多个节点更容易)。节点所有者可以允许任何人发布到节点,因此这不是问题

提到了PEP,但如果您想向不在名册中的用户发布,则PEP不是正确的解决方案


Pubsub还允许您为消息定义任何想要的内容类型,或者如果消息传输的简单行为足以提供信息,则可以不定义任何内容类型。

谢谢您的回复。我还尝试了用strophe的MUC,效果很好。但在这种情况下,我想要的是一个通知系统,例如假设有一个问答模块,我发布了一个问题,如果user1回答了这个问题,那么我会收到一个通知。然后如果userB应答,我和userA都会收到一个通知。最重要的是,如果我在网上发布答案,我应该会看到一个弹出窗口,而不用我点击任何东西。如何使用服务器端xmpp库(如xmpphp)向所有jid发送标题消息,并使用strophe在客户端处理消息?为了澄清我的上述问题,我尝试使用xmpphp向jid发送消息,并使用strophe客户端接收消息,结果行得通。我不确定的是,如果一条消息要发送给很多人,这种方法是否会带来任何问题。谢谢你的回复。问题是我必须处理不同类型的通知。在某些情况下,pubsub似乎是理想的解决方案,但并非对所有人都是如此。这就是为什么我考虑将手动发送通知消息作为一种针对所有人的单一解决方案。这不是我必须说的首选方式,由于您的应用程序负载开始增加,这种方法将无法扩展。最好让jabber服务器自己进行广播,您只需指示jabber服务器应该广播什么/何时/谁的通知……感谢您的回复,我们将检查PEP。根据我的要求,通知需要发布给我的名册上的任何人。假设我们考虑这个特殊的线索,如果阿比纳夫和丘李都在我的名单中,但他们不是在彼此的名册,尽管当李克强回答,通知应该去阿比纳夫,因为他已经回答过。另外,发送给abhinav和我(问题作者)的文本应该不同。然后我建议您使用MUC方法,使用聊天室作为pubsub节点。但将数据放在单独的名称空间中。这样,您的数据就不会出现在聊天室中。正如我所说,我还没有找到一个支持pubsub的公共服务器。你的建议是有效地破解MUC,这样你就可以像使用pubsub一样使用它。既然你可以使用pubsub,为什么还要麻烦呢?的确如此。Pubsub非常通用,任何远程描述发布-订阅场景的东西都将其视为Pubsub的可能用途。它完全不是一个解决方案。我们不是来推销第三方商业服务的。你在抱怨什么商业服务?Pubsub只是XMPP协议的扩展。我甚至没有提到许多可用的OSS或商业解决方案中的任何一个。