【问题标题】:Developing Chat/Real time web application开发聊天/实时网络应用程序
【发布时间】:2012-09-28 20:23:29
【问题描述】:

我目前正在研究构建一个拥有超过 1 万在线用户的聊天系统。我遇到了一些技术和方法,例如 jabber(XMPP)、websockets、长轮询、推送。就我现在而言,考虑到用户数量,长轮询可能不起作用。我知道有很多方法可以做到这一点。我也知道 facebook 和 Google 聊天系统是在 XMPP 上开发的。

如果有人能指出正确的方向,我将不胜感激。我相信所有这些方法和技术都很好,具体取决于项目的规模。我绝对需要性能和可扩展性。

【问题讨论】:

  • 您可能希望查看服务器端以解决 C10K 问题。一种方法是使用 http push module 的 nginx
  • 感谢罗纳尔奇!这就是我正在做的。但是有这么多选择,很难选择最合适的一个。这与我在选择 php 框架时所经历的过程相同。那里有很多,但它们有可扩展性等限制。

标签: xmpp chat push polling


【解决方案1】:

我已经将Socket.ioNodeJS 一起用于这样的聊天应用程序。它在中等服务器上扩展到超过 10,000 个并发用户,并且还有很大的增长空间。

这确实取决于您的限制。

  • 您打算使用哪种硬件?
  • 哪种操作系统可以为您的服务器提供动力?
  • 您的目标是哪些客户端平台?
  • 您是否有需要适应的现有基础架构?
  • 您以前选择过一种编程语言吗?
  • 您的团队成员拥有的现有技能以及您的团队在必要时采用新平台和语言的能力。

在做出决定时考虑以上所有因素。

就我个人而言,我发现 XMPP 已经足够了,但对于我的目的来说有点臃肿。 YMMV。

【讨论】:

  • 感谢里奥的回复!我在研究时遇到了 Socket.io 和 NodeJS。当前状态:正在实现的语言是 PHP,目标平台是浏览器,服务器很可能是 Windows 驱动的,它是一个新的基础架构。根据我的发现,为此类项目选择合适的技术至关重要。我以前只用ajax做过这样的小事。但是,我知道在这种情况下它是行不通的。毫无疑问,推送服务器将是一种选择。基于这个事实,你还推荐 Socket.io 和 NodeJS 吗?
  • @Charlie:我之前没有在 Windows 服务器上尝试过 nodeJS,所以我真的无法对此发表评论。关于您的目标是浏览器,在我看来,NodeJS+Socket.io 应该可以正常工作。如果你真的需要扩展,我真的不会尝试任何与 PHP 相关的推送,因为 PHP 不适合那种架构。
【解决方案2】:

您正在比较一个水果篮和三种不同的橙子。

XMPP 是您提到的唯一一个实际上旨在支持聊天系统(其中有很多)的协议。其他只是异步消息传递协议/技术。 XMPP 已经通过BOSH 支持基于http 的聊天。毫无疑问,当规范最终确定时,它也将支持 WebSockets。实际上已经写了一个draft,但此时它似乎是使用草稿的草稿,因此可能会很少(如果有的话)实现。

使用 XMPP 可以让您在经过验证的技术的基础上构建聊天系统,并让您可以“在后台”选择要使用的传输方式。您实际上并没有说是否需要基于 http 的传输,但是使用 XMPP,您可以使用基于 tcp 套接字的传输或基于 http 的传输(BOSH),并且知道它将来也将支持 WebSockets。

当然,另一个好处是这是一个广泛使用的标准,它将允许在几乎所有流行(和不太流行)的语言和平台中重用 existing clients, servers and libraries

与您引用的数字无关,可伸缩性不是太大问题,因为大多数(可能全部)现有 xmpp 服务器将处理这么多用户。

【讨论】:

  • 伟大的信息,罗宾!如您所知,我不是该主题的专家,也不是开发此类系统所需采取的方法的专家。然而,事情开始明朗了。根据您的回答和研究,看来我需要的不仅仅是一个 http 服务器(即 apache)和一个数据库来处理这样的事情。我理解这一点,因为我之前在一个小项目中尝试过类似的东西,使用 apache 和 Flash 媒体服务器(RTMP 协议)通过 http 提供实时视频流。看来我现在需要做类似的事情。我非常感谢有关 XMPP 的信息!
猜你喜欢
  • 2011-09-28
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多