使用WebSocket+Node.js的聊天服务器 vs 使用XMPP的本地客户端

7

我无法找到任何有关使用node.js聊天服务器运行的聊天客户端与使用xmpp工作的客户端之间比较的合理基准。

我知道node.js是异步的,据我所知,xmpp也是如此。但是,我的主要关注点是在同样数量的并发用户下的性能。

我需要这些信息来编写一个安卓应用程序。想知道您使用这两个系统的意见和优缺点。

先感谢您。


你有没有对预计会有多少并发用户有任何想法?(大概的数量?) - TheHippo
使用Node.js,我认为在同一硬件上最多可以处理4000个请求,如果使用XMPP,则最多只能处理2000个请求。 - met.in
这显然取决于硬件,但如果你认为XMPP在相同的硬件上只支持一半的连接数,我认为你是错的。具体数据取决于应用程序和使用情况,但我知道单服务器XMPP设置可以轻松处理4K。即使jabber.org也在单个服务器上运行,在高峰期有20K个连接。考虑到你说你不会使用很多XMPP功能,你的应用程序可能比像jabber.org这样的“普通”XMPP服务器更进一步。 - MattJ
我也很好奇,为什么你认为在同一硬件上只能有2000个用户?别管它只是node.js的一半没有理由,这个数字似乎还是很低的,除非你的服务器是安卓应用程序;-) Openfire曾经在单个节点上测试过250K用户(尽管是在2008年)。 - Robin
3个回答

1

虽然我理解你的问题,但你试图比较一个服务器端的Javascript实现(Node.js)和一个消息协议(XMPP)。

已经有许多现成的XMPP服务器和客户端库可供使用。如果你考虑使用XMPP,应该评估这些具体的东西,然后将其与其他解决方案进行比较。

如果你在Node和Websockets之上自己实现一些东西,那么你需要处理XMPP已经提供的所有内容,例如身份验证、加密、应用程序协议等,以及所有服务器端路由逻辑。许多XMPP服务器还支持集群——在单个域后面透明地运行多个服务器。

最终选择取决于你,因为你最了解你特定应用程序的情况。你应该比较解决方案不仅在单节点性能上,还包括开发时间和可扩展性等其他因素。


MattJ,你说的可扩展性完全正确。然而,我需要知道这两个平台之间的性能差异。认证、路由等并不是我优先考虑的事项。 - met.in
我的观点是他们应该这样做。你的应用程序需求应该事先确定,然后再考虑实现方案的性能问题。那时你也会知道Node.js+websocket可能缺少一些XMPP提供的功能有多大的影响。但如果你确实需要XMPP的功能,谷歌和Facebook证明它可以成功扩展。 - MattJ
我已经查看了XMPP提供的功能。正如我所说,对我来说性能和每台机器上并发总用户数更为重要。 - met.in

1

我为客户构建了几个使用Node.js的聊天服务,虽然我可以说使用Node.js轻松运行基本的聊天服务,但如果您选择这条路,您可能会花费很多时间重新发明轮子。像eJabberd这样的XMPP服务器具有许多内置功能,您无需重建。身份验证、多用户聊天、管理(踢出/禁止/忽略)、用户首选项、日志记录等。

对于我所工作的项目来说,eJabberd肯定是过度设计了,因为他们只需要基础知识,但在做出决定之前,您应该仔细考虑您的用例。

我正在考虑为XMPP创建一个Node.js Web客户端,以创建类似于Campfire的东西,但其后端是eJabberd。我实际上还没有承诺要这样做,但我认为这将是同时获得最佳效果的好方法。


1

这也取决于您正在编写哪种类型的客户端:基于浏览器的客户端使用BOSH,它是XMPP over HTTP,使用长轮询(类似于彗星)。这会从每个客户端创建至少一个请求,每30秒一次(取决于设置),当您获得几千个客户端后,这些请求开始累积。我很想看到这方面的比较 - 看起来Web套接字应该在这方面有优势。


当然,现在您可以在Websockets上使用XMPP并获得两全其美的效果。 - Robin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接