我有一个带有 Socket.io 聊天应用程序的 Node.js 和一个 XMPP Openfire 聊天系统。我期待用 Node.js 和 Socket.io 替换 XMPP。但是,有传言说,带有 Socket.io 的 Node.js 会出现问题,如果服务器崩溃并重新上线,则会出现瓶颈综合症,或者可能无法重新连接 10,000 个在线用户。真的吗?
另一个问题。在什么情况下 XMPP 会比 Socket.io 更合适,反之亦然?
XMPP 是面向消息的中间件(维基百科)的开放标准通信协议。
Node.js 是一个基于 JavaScript 的开发者工具,用于创建网络服务。
这两件事真的没有可比性。如果您使用 socket.io 构建了一个聊天应用程序,它可能会遇到瓶颈综合症,但这在很大程度上取决于您的应用程序代码。
一般来说,如果你想超越简单的基于浏览器的聊天,我会认真考虑 XMPP(又名 Jabber),因为所有操作系统都可以使用 XMPP 客户端。
我认为 Node.js 的优点在于它是用一种普遍理解的语言 (Javascript) 编写的,而不是 XMPP 服务器,而 XMPP 服务器是常见的用 erlang/Java 编写的,但并不被广泛理解。
如果您想完全控制服务器行为并编写巧妙的模块,那么我怀疑 node 将是您的最佳解决方案。
Node.js 可能失败的地方是,如果您需要扩展到一台服务器之外,您将不得不将其设计到您的节点应用程序中。我相信 eJabberd 和 Openfire 都支持开箱即用的集群,因此您需要做的就是让另一台服务器联机,将两者配置为相互通信,然后离开。
我对您的总体建议是,如果当前的 XMPP 系统对您来说运行良好,那么我会坚持使用它。
正如 mikl 所说,XMPP 是一种协议,而不是应用程序框架。
您可以在 NodeJS 之上构建 XMPP 应用程序,就像在 NodeJS 之上构建 SocketIO 应用程序一样。不同之处在于 OpenFire 和 ejabberd 已经存在并经过了一段时间的测试,而不是您自己构建的一些解决方案。这并不意味着你应该这样做,但它确实意味着你应该有一个很好的商业案例来这样做。
如果您正确设置了基础架构,则几乎可以在任何框架中执行此操作。为了减少峰值期间的延迟,您应该对您的请求进行负载平衡,这也可能是任何系统所需要的。
您还可以查看设计用于 node.js 的 xmppjs 库。 http://xmppjs.prosody.im/