聊天应用程序:pubsubhubbub vs xmpp

时间:2010-03-18 05:35:06

标签: chat xmpp tornado pubsubhubbub

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

  • facebook龙卷风
    • 缺点:不使用主聊天协议xmpp而是使用pubsubhubbub
    • 专业人士:我非常喜欢它的开发简单性(webserver + webframework); pubsubhubbub作为协议似乎比xmpp更简单;我知道python
  • xmpp + bosch,旁遮普,ejabberd
    • 缺点:不知道二郎;整体看起来有点难以开发
    • 专业人士:使用xmpp协议

聊天应用需要具备以下条件:

  • 私信
  • 公共房间
  • 私人房间
  • 房间的聊天记录(不是永远,只是最后n条消息)
  • html嵌入
  • url to chat room

这两个选项看起来都是可扩展的,所以我并不担心(我们也考虑在亚马逊的ec2中运行应用程序)。我知道有一个项目使用龙卷风构建一个xmpp服务器,但它还没有准备好用于生产,我们的截止日期并不是那么大。基本上我的主要担心是开发的简易性,以后稍后使用pubsubhubbub开发聊天应用程序后悔但我在某处读到PubSubHubbub可能最终取代XMPP,因为REST取代了SOAP - 所以你怎么看?

5 个答案:

答案 0 :(得分:11)

转到XMPP。

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

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

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

答案 1 :(得分:4)

Facebook Tornao根本不使用PubSubHubbub!

选择XMPP,它专为您所寻找的设计而设计。龙卷风并非专门用于此,而是针对长期轮询请求。

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

答案 2 :(得分:1)

如果您不需要通过XMPP进行联合,但希望快速进行原型设计和快速部署以及开箱即用的可扩展性,请查看Lift web框架的chat server in one page of code示例。

答案 3 :(得分:0)

PubSubHubbub(PuSH)首先从未用于聊天应用程序。它有时被称为“用于Web的IM”。我建议你仔细阅读这张幻灯片:Realtime Ruby for the Realtime Web by igrigorik

问题是你想要获得的实时性?如果你想要速度,那么XMPP是最好的选择。(500ms)而PuSH取决于你的饲料及其传递方式。请记住,在内容到达用户之前,PuSH总共有4个网络跃点。

更大的麻烦是PuSH依赖HTTP Post。即使您最终设计了基于PuSH的聊天应用程序,并在稍后阶段说,您希望将其提供给其他设备,甚至作为桌面应用程序,您也必须使用XMPP转发相同的内容。您将失去的另一个地方是,您的聊天应用用户很难从他们选择的任何其他IM登录。

答案 4 :(得分:0)

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

Atmosphereswagger sockets是很好的java框架,您可以将其插入到Jersey REST api中并实现此目的。

Atmospehre的创建者jfarcand的博客中有一个example of chat application使用这些技术构建。