Chat 聊天应用程序:pubsubbub vs xmpp

Chat 聊天应用程序:pubsubbub vs xmpp,chat,xmpp,tornado,websub,Chat,Xmpp,Tornado,Websub,我不确定构建聊天应用程序的最佳堆栈。目前我在考虑两个主要的选择: facebook龙卷风 缺点:不使用主聊天协议xmpp,但使用pubsubhubbub 优点:我非常喜欢它的开发简单性(webserver+webframework);pubsubb作为一个协议似乎比xmpp更简单;我知道python xmpp+博世、旁遮普、埃贾伯德 缺点:不知道二郎;总的来说,发展起来似乎有点困难 优点:使用xmpp协议 聊天应用程序需要具备以下功能: 私人信息 公共房间 包间 聊天室的聊天历史记

我不确定构建聊天应用程序的最佳堆栈。目前我在考虑两个主要的选择:

  • facebook龙卷风
    • 缺点:不使用主聊天协议xmpp,但使用pubsubhubbub
    • 优点:我非常喜欢它的开发简单性(webserver+webframework);pubsubb作为一个协议似乎比xmpp更简单;我知道python
  • xmpp+博世、旁遮普、埃贾伯德
    • 缺点:不知道二郎;总的来说,发展起来似乎有点困难
    • 优点:使用xmpp协议
聊天应用程序需要具备以下功能:

  • 私人信息
  • 公共房间
  • 包间
  • 聊天室的聊天历史记录(不是永远的,只是最后n条消息)
  • html嵌入
  • 聊天室的url
这两个选项看起来都是可伸缩的,所以我并不担心(我们也在考虑在亚马逊的ec2上运行这个应用程序)。我知道有一个项目使用tornado构建了一个xmpp服务器,但它还没有准备好投入生产使用,我们的最后期限也没有那么大。基本上,我主要担心的是开发的易用性,而不是后来对使用pubsubbub开发聊天应用程序感到后悔,但我在某个地方读到,pubsubbub最终可能会取代XMPP,就像REST取代SOAP一样——那么你觉得呢

选择XMPP

开箱即用,ejabberd支持您的所有需求。您不需要查看任何erlang,也不需要为ejabberd编写自定义模块。 使用Strophejs,浏览器中的XMPP(这显然是您正在做的)非常棒

关于pubsubhubbub替换XMPP的最后一个问题,不要指望它。XMPP已经有10多年的历史了,在客户端和服务器上都有可靠的开源和专有的可互操作实现,而且非常优雅,所以不会消失


您正在开发一个聊天应用程序,这就是XMPP的用途。

Facebook Tornao根本不使用PubSubHubbub

选择XMPP,它是为您所寻找的东西而设计的。Tornado并不是专门为这种情况而设计的,而是为一般的长轮询请求而设计的

不需要使用旁遮普语,ejabbed http绑定模块现在做得很好。此外,您不需要学习Erlang,就像编写使用Apache的Web应用程序时不需要学习C一样:)查看类似的内容。你唯一需要使用的是XMPP服务器和聊天室的配置,然后是客户端(在浏览器中)的Javascript。

pubsubbub(推送)从一开始就不适用于聊天应用程序。它有时被称为“网络即时通讯”。我建议你看一下这张幻灯片:

真正的问题是你想获得多大的实时性?如果你想要速度,那么XMPP是最好的选择。(500毫秒),而推送取决于你的馈送和它的中继方式。记住,在内容到达订户之前,推送总共需要4次网络跳数


更大的问题是推送依赖于HTTP Post。即使你最终设计了一个基于推送的聊天应用程序,比如说在以后的阶段,你想让它可用于其他设备,甚至作为桌面应用程序,你也必须使用XMPP转发相同的内容。您将失去的另一个地方是,您的聊天应用程序用户很难从他们选择的任何其他IM登录。

如果您不需要通过XMPP进行联合,但希望快速原型化和部署,以及开箱即用的可扩展性,看一下Lift web框架的示例。

您可以将REST API与WebSocket结合使用来实现发布者/订阅者体系结构

并且是很好的java框架,您可以将其插入RESTAPI并实现这一点


Atmospehre创始人jfarcand的博客中有一个是用这些技术构建的。

谢谢。Aristochat看起来很有希望。同时也发现了Speeqe()。我会把它们都查出来的。根据这张照片,龙卷风使用的是pubsubhubbub。Strophe看起来不错(Aristochat也使用它)。谢谢:)注意,pubsubbub(PuSH)甚至与XMPP不太接近。PuSH是一个非常基本的发布-订阅协议,它与身份验证非常相似。XMPP是如此之多,以至于它不适合在这个评论框中。