使用Socket.io模块与XMPP的Node.js – 优点和缺点

我有一个Node.js与Socket.io聊天应用程序和一个XMPP Openfire聊天系统。 我期待用Node.js和Socket.io取代XMPP。 然而,有人说,Node.js与Socket.io会有问题,如果服务器崩溃,并返回在线将有一个瓶颈综合症或者可能无法重新连接10,000个在线用户。 真的吗?

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

XMPP是面向消息中间件 (Wikipedia) 的开放标准通信协议 。

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

这两件事情并没有真正的比较。 如果您使用socket.io构build了一个聊天应用程序,则可能会遇到瓶颈问题,但这取决于您的应用程序代码。

一般来说,如果你想超越简单的基于浏览器的聊天,我会认真考虑XMPP(aka.Jabber),因为XMPP客户端可以随时用于所有操作系统。

我认为Node.js的优点在于,它是用通常理解的语言(Javascript)编写的,而不是XMPP服务器,而这些服务器通常使用erlang / Java语言编写,这些服务器不是那么广泛的理解。

如果你想完全控制服务器的行为,并写出聪明的模块,那么我怀疑这个节点将是你最好的解决scheme。

Node.js可能会崩溃的地方是,如果您需要扩展到一台服务器之外,您将不得不将其devise到您的节点应用程序中。 我相信eJabberd和Openfire都支持开箱即用的集群,所以你只需要把另外一台服务器联机,configuration两者互相通话就可以了。

我对你的整体build议是,如果现在的XMPP系统对你来说工作的很好,那我就坚持下去。

正如mikl所说,XMPP是一个协议,而不是一个应用程序框架。

您可以在NodeJS之上构buildXMPP应用程序,就像在NodeJS之上构buildSocketIO应用程序一样。 不同之处在于,OpenFire和ejabberd已经在一段时间内进行了testing,而不是一些您自己构build的解决scheme。 这并不意味着你应该这样做,但这确实意味着你应该有一个好的商业案例。

如果你正确地设置你的基础设施,你可以在几乎任何框架中做到这一点。 为了缓解峰值期间的延迟,您应该负载平衡您的请求,而这些请求也可能是任何系统所需要的。

您还可以检查devise用于node.js的xmppjs库。 http://xmppjs.prosody.im/