我不确定构建聊天应用程序的最佳堆栈。目前我正在考虑两个主要选择:
聊天应用需要具备以下条件:
这两个选项看起来都是可扩展的,所以我并不担心(我们也考虑在亚马逊的ec2中运行应用程序)。我知道有一个项目使用龙卷风构建一个xmpp服务器,但它还没有准备好用于生产,我们的截止日期并不是那么大。基本上我的主要担心是开发的简易性,以后稍后使用pubsubhubbub开发聊天应用程序后悔但我在某处读到PubSubHubbub可能最终取代XMPP,因为REST取代了SOAP - 所以你怎么看?
答案 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一起使用来实现发布者/订阅者体系结构。
Atmosphere和swagger sockets是很好的java框架,您可以将其插入到Jersey REST api中并实现此目的。
Atmospehre的创建者jfarcand的博客中有一个example of chat application使用这些技术构建。