22

我有一个带有 Socket.io 聊天应用程序的 Node.js 和一个 XMPP Openfire 聊天系统。我期待用 Node.js 和 Socket.io 替换 XMPP。但是,有传言说,带有 Socket.io 的 Node.js 会出现问题,如果服务器崩溃并重新上线,则会出现瓶颈综合症,或者可能无法重新连接 10,000 个在线用户。真的吗?

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

4

4 回答 4

13

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

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

这两件事真的没有可比性。如果您使用 socket.io 构建了一个聊天应用程序,它可能会遇到瓶颈综合症,但这在很大程度上取决于您的应用程序代码。

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

于 2011-05-05T07:57:42.917 回答
11

我认为 Node.js 的优点在于它是用一种普遍理解的语言 (Javascript) 编写的,而不是 XMPP 服务器,而 XMPP 服务器是常见的用 erlang/Java 编写的,但并不被广泛理解。

如果您想完全控制服务器行为并编写巧妙的模块,那么我怀疑 node 将是您的最佳解决方案。

Node.js 可能失败的地方是,如果您需要扩展到一台服务器之外,您将不得不将其设计到您的节点应用程序中。我相信 eJabberd 和 Openfire 都支持开箱即用的集群,因此您需要做的就是让另一台服务器联机,将两者配置为相互通信,然后离开。

我对您的总体建议是,如果当前的 XMPP 系统对您来说运行良好,那么我会坚持使用它。

于 2011-05-05T08:08:55.283 回答
5

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

您可以在 NodeJS 之上构建 XMPP 应用程序,就像在 NodeJS 之上构建 SocketIO 应用程序一样。不同之处在于 OpenFire 和 ejabberd 已经存在并经过了一段时间的测试,而不是您自己构建的一些解决方案。这并不意味着你应该这样做,但它确实意味着你应该有一个很好的商业案例来这样做。

如果您正确设置了基础架构,则几乎可以在任何框架中执行此操作。为了减少峰值期间的延迟,您应该对您的请求进行负载平衡,这也可能是任何系统所需要的。

于 2011-05-08T16:52:12.523 回答
3

您还可以查看设计用于 node.js 的 xmppjs 库。 http://xmppjs.prosody.im/

于 2011-07-16T07:48:41.450 回答