聊天应用:pubsubhubbub与xmpp的区别

7

我不确定要构建聊天应用程序的最佳技术栈。目前,我考虑了两个主要选项:

  • Facebook Tornado
    • 缺点:不使用主流的聊天协议XMPP,而是使用PubSubHubbub协议
    • 优点:我非常喜欢它的开发简单性(Web服务器+Web框架);相比XMPP,PubSubHubbub协议也似乎更简单;我也熟悉Python语言。
  • XMPP + Bosch、Punjab、Ejabberd
    • 缺点:不熟悉Erlang语言;总体开发难度似乎有些大
    • 优点:使用XMPP协议

聊天应用程序需要具备以下功能:

  • 私人消息
  • 公共房间
  • 私人房间
  • 房间聊天记录(不是永久记录,只记录最后n条消息)
  • HTML嵌入
  • 聊天室URL

这两个选项似乎都可扩展,所以这不是我的担忧(我们正在考虑在Amazon EC2上运行该应用程序)。我知道有一个项目使用Tornado构建了XMPP服务器,但它还没有准备好供生产使用,而我们的截止日期并不紧迫。基本上,我主要担心的是开发的便捷性与稍后使用PubSubHubbub协议来开发聊天应用程序会否后悔,但我在某个地方读到过, PubSubHubbub可能会取代XMPP,就像REST取代SOAP一样 - 那么你认为呢?


请注意,PubSubHubbub(PuSH)与XMPP相去甚远。 PuSH是一种非常基本的发布-订阅协议,具有类似于[Dialback](http://xmpp.org/extensions/xep-0220.html)的身份验证功能。 XMPP远不止这些,它无法适应此评论框。 - Zash
5个回答

11

选择XMPP。

ejabberd默认支持您的所有需求,您无需查看任何erlang或为ejabberd编写自定义模块。 而且使用Strophejs,在浏览器中使用XMPP非常棒(这似乎是你正在做的)。

至于您最后一个关于pubsubhubbub是否可以替代XMPP的问题,不要抱有这样的期望。XMPP已经超过10年了,具备可靠的开源和专有实现,客户端和服务器都互通,优雅简洁,因此不会消失。

而且您正在开发XMPP所专门用于的聊天应用程序。


Strophe看起来不错(它也被Aristochat使用)。谢谢 :) - scc

4

Facebook Tornado根本不使用PubSubHubbub!

选择XMPP,它是为你寻找的内容而设计的。Tornado并非专门为此设计,而是针对长轮询请求进行了设计。

没有必要使用Punjab,ejabbed http-bind模块现在做得很好。此外,您无需学习Erlang,就像编写使用Apache的Web应用程序时无需学习C一样 :) 查看类似Aristochat的内容。唯一需要处理的是XMPP服务器和聊天室的配置,然后是客户端(浏览器中的Javascript)。


谢谢。Aristochat看起来很有前途。同时我也发现了Speeqe(http://code.stanziq.com/speeqe)。我会检查它们两个。根据这篇文章http://www.readwriteweb.com/archives/where_is_the_real_time_web_message_bus.php,tornado使用pubsubhubbub。 - scc

1

0

PubSubHubbub(PuSH)从一开始就不是为聊天应用程序而设计的。有时它被称为“Web上的即时通讯”。我建议您阅读这个幻灯片:Realtime Ruby for the Realtime Web by igrigorik

问题实际上是你想要多实时?如果你想要速度,那么XMPP是最好的选择。(500毫秒),而PuSH取决于您的源和如何中继。请记住,在内容到达订阅者之前,需要经过4次网络跳转。

更大的麻烦是PuSH依赖于HTTP Post。即使您最终基于PuSH设计了一个聊天应用程序,并且在以后的阶段,您希望将其用作其他设备甚至桌面应用程序,您仍然需要使用XMPP中继相同的内容。您还会失去的另一个地方是,您的聊天应用用户很难从他们选择的任何其他即时通讯工具登录。


0
您可以使用REST API和WebSocket实现发布者/订阅者架构。 Atmosphereswagger sockets是不错的Java框架,您可以将它们插入到您的Jersey REST API中并实现此功能。
Atmospehre的创建者jfarcand的博客有一个聊天应用程序示例 使用这些技术构建。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接