7

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

  • 脸书龙卷风
    • 缺点:不使用主聊天协议 xmpp 而是 pubsubhubbub
    • 优点:我真的很喜欢它的简单开发(webserver + webframework);pubsubhubbub 作为协议似乎也比 xmpp 更简单;我知道蟒蛇
  • xmpp + 博世、旁遮普语、ejabberd
    • 缺点:不懂 erlang;总体似乎有点难以开发
    • 优点:使用 xmpp 协议

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

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

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

4

5 回答 5

11

去 XMPP。

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

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

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

于 2010-03-18T10:50:31.177 回答
4

Facebook Tornao 根本不使用 PubSubHubbub!

选择 XMPP,它专为您的需求而设计。Tornado 并不是专门为此而设计的,而是针对一般的长轮询请求而设计的。

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

于 2010-03-18T11:31:45.557 回答
1

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

于 2010-07-19T23:54:04.607 回答
0

您可以使用带有 WebSocket 的 REST API 来实现发布者/订阅者架构。

Atmosphereswagger 套接字是不错的 java 框架,您可以将其插入 Jersey REST api 并实现此目的。

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

于 2012-07-14T22:08:06.217 回答
0

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

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

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

于 2010-03-21T04:43:03.723 回答