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

  • 脸书龙卷风
    • 缺点:不使用主要的聊天协议 xmpp 而是 pubsubhubbub
    • 优点:我真的很喜欢它的开发简单性(网络服务器+网络框架);作为一个协议,pubsubhubbub 看起来也比 xmpp 更简单;我知道蟒蛇
  • xmpp + 博世、旁遮普、ejabberd
    • 缺点:不懂二郎;总体来说开发起来似乎有点困难
    • 优点:使用xmpp协议

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

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

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

有帮助吗?

解决方案

去XMPP。

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

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

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

其他提示

Facebook Tornao 根本不使用 PubSubHubbub!

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

无需使用 Punjab,ejabbed http-bind 模块现在已经做得很好了。另外,你不需要学习 Erlang,就像编写使用 Apache 的 Web 应用程序时不需要学习 C 一样:) 查看类似的内容 亚里士多德. 。您唯一需要操作的是 XMPP 服务器和聊天室的配置,然后是客户端的 Javascript(在浏览器中)。

如果您不需要通过 XMPP 进行联合,但确实希望快速构建原型并部署以及开箱即用的可扩展性,请查看 Lift Web 框架的示例 一页代码中的聊天服务器.

PubSubHubbub(PuSH) 从一开始就不适合聊天应用程序。它有时被称为“Web IM”。我建议您浏览一下这张幻灯片: 用于实时 Web 的实时 Ruby,作者:igrigorik

真正的问题是你想要多实时?如果您想要速度,那么 XMPP 是最好的选择。(500 毫秒),而 PuSH 取决于您的源及其中继方式。请记住,使用 PuSH,内容到达订阅者之前总共需要经过 4 个网络跃点。

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

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

气氛招摇插座 是不错的 java 框架,您可以将其插入到您的 球衣 REST api 并实现这一点。

Atmospehre 创建者 jfarcand 的博客有一个 聊天应用程序示例 用这些技术构建的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top