Node.js与Socket.io模块和XMPP之间的优势与劣势

22

我有一个使用Node.js和Socket.io的聊天应用程序以及一个XMPP Openfire聊天系统。我希望用Node.js和Socket.io替换XMPP。然而,有人说,如果服务器崩溃并重新上线,Node.js和Socket.io会出现瓶颈综合征或者可能无法重新连接它的10000个在线用户。这是真的吗?

另一个问题是,在什么情况下使用XMPP比Socket.io更合适,反之亦然?

4个回答

13

XMPP是一种开放标准的通信协议,用于消息中间件(维基百科)。

Node.js是一个基于JavaScript的开发工具,用于创建网络服务。

这两个东西并不真正可比。如果您使用socket.io构建了聊天应用程序,则有可能会遇到瓶颈症候群问题,但它很大程度上取决于您的应用程序代码。

总的来说,如果您想超越简单的基于浏览器的聊天,我会认真考虑使用XMPP(又名Jabber),因为各操作系统上都有XMPP客户端可用。


嗨Mikl,感谢你的意见。你认为Node.js可能会遭受瓶颈综合症的原因是什么? - user739217
我认为Node.js本身并没有固有的瓶颈,但如果你在Node.js上构建一个聊天服务器(Node本身只是用于构建网络服务的工具包),它必须非常小心地设计才能处理一次性重新连接10,000个用户。主要问题将是获取所有所需数据以验证用户并向他们发送可能错过的任何聊天消息。这涉及到多达10,000个数据库查询。很少有系统可以在几秒钟内处理完毕。 - mikl
在使用Node.js构建XMPP框架时,可扩展性是否会成为一个问题? - Hanu

11

我认为Node.js的优点在于它是用一种常见的语言(JavaScript)编写而成,而常见的XMPP服务器则是用Erlang/Java等非常流行的语言编写,这些语言并不像JavaScript那样被广泛理解。

如果你想完全控制服务器的行为并编写聪明的模块,那么我认为Node.js会是最好的解决方案。

然而,如果你需要扩展到多台服务器,那么Node.js可能会有问题。我相信eJabberd和Openfire都支持开箱即用的集群功能,所以你只需要将另一个服务器上线,配置两台服务器进行通信,就可以愉快地使用了。

我的总体建议是,如果当前的XMPP系统已经能够很好地满足你的需求,那么我建议你继续使用它。


感谢您的输入,詹姆斯。如果Node.js托管在云服务器上,那么这将消除其与Openfire或eJabberd集群支持相比的劣势。我们的Openfire XMPP服务器存在内存泄漏问题,只是提醒一下。 - user739217
但是您仍然需要编写和维护Node.js解决方案。 - James C
Socket.io现在支持集群化http://socket.io/#announcement,或者使用http://pubsub.io,这是一个独立的基于nodejs编写的集群消息中心。 - ianj
4
暗示Java是一门晦涩难懂的语言可以获得欢乐加分! - clacke

5
像mikl所说,XMPP是一种协议而不是应用程序框架。
您可以像在NodeJS上构建SocketIO应用程序一样,在其上构建XMPP应用程序。区别在于OpenFire和ejabberd已经存在并经过测试,而不是您自己构建的某个解决方案。这并不意味着您应该这样做,但这确实意味着您应该有一个好的商业理由来这么做。
如果您正确设置基础架构,几乎可以在任何框架中进行此操作。为了减轻峰值时的延迟,您应该负载平衡您的请求,这也可能对任何系统都是必需的。

3

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