我目前正在研究建立一个拥有超过 1 万在线用户的聊天系统。我遇到了一些技术和方法,例如 jabber(XMPP)、websockets、长轮询、推送。就我现在而言,考虑到用户数量,长轮询可能不起作用。我知道有很多方法可以做到这一点。我也知道 facebook 和 Google 聊天系统是在 XMPP 上开发的。
如果有人能指出我正确的方向,我将不胜感激。我相信所有这些方法和技术都很好,具体取决于项目的规模。我绝对需要性能和可扩展性。
我已经将Socket.io和NodeJS一起用于这样的聊天应用程序。它在中等服务器上扩展到超过 10,000 个并发用户,并且有很大的增长空间。
这确实取决于您的限制。
在做出决定时,请考虑以上所有因素。
就我个人而言,我发现 XMPP 已经足够了,但对于我的目的来说有点臃肿。YMMV。
您正在比较一个水果篮和三种不同的橙子。
XMPP 是您提到的唯一一个实际上旨在支持聊天系统(其中很多存在)的协议。其他只是异步消息传递协议/技术。XMPP 已经通过BOSH支持基于 http 的聊天。毫无疑问,当规范最终确定时,它也将支持 WebSockets。实际上已经编写了一个草稿,但在这一点上,它似乎是使用草稿的草稿,因此可能很少(如果有的话)实现。
使用 XMPP 将允许您构建一个经过验证的技术来实现聊天系统,并允许您选择要“在后台”使用的传输方式。您实际上并没有说是否需要基于 http 的传输,但是使用 XMPP,您可以使用基于 tcp 套接字的传输或基于 http 的传输 (BOSH),并且知道它将来也将支持 WebSockets。
另一个好处当然是这是一个广泛使用的标准,它将允许在几乎所有流行(而不是那么流行)的语言和平台中重用现有的客户端、服务器和库。
可伸缩性与您引用的数字无关,因为大多数(可能全部)现有 xmpp 服务器将处理那么多用户。