【问题标题】:Chat server with websocket+node.js vs a native client with xmpp使用 websocket+node.js 的聊天服务器与使用 xmpp 的本机客户端
【发布时间】:2012-03-24 13:30:02
【问题描述】:

我找不到任何合理的基准来比较使用 node.js 聊天服务器与运行的聊天客户端 V.S.一个使用 xmpp 的客户端。

我知道 node.js 是异步的,据我所知 xmpp 也是如此。但是,我主要关心的是并发用户数量相同时的性能。

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

提前致谢。

【问题讨论】:

  • 您知道预计会有多少并发用户吗? (大概?)
  • 对于 node.js,我认为是 4000,如果是 xmpp,我认为大多数 2000 在同一硬件上
  • 这显然取决于硬件,但如果您认为 XMPP 仅支持同一硬件上一半的连接数,我相信您错了。硬统计取决于应用程序和使用配置文件,但我知道单服务器 XMPP 设置可以轻松处理 4K。甚至 jabber.org 也运行在单个服务器上,在高峰使用时有 20K 连接。鉴于您说您不会使用很多 XMPP 功能,您的应用程序可能会比 jabber.org 等“普通”XMPP 服务器更进一步。
  • 我也很好奇为什么你认为你在同一个硬件上只能有 2000 个用户?没关系,它只是 node.js 的一半,这个数字似乎很低,除非你的服务器是 android 应用程序;-) Openfire 在单个节点上使用250K users 进行了测试(2008 年没有少)。

标签: node.js xmpp chat openfire


【解决方案1】:

虽然我理解您的要求,但您正在尝试将服务器端 Javascript 实现 (Node.js) 与消息传递协议 (XMPP) 进行比较。

已经编写了许多现成的 XMPP 服务器和许多客户端库。由于这些是您将要使用的具体内容,因此如果您正在考虑使用 XMPP,则应该评估这些内容,然后将其与解决您问题的其他解决方案进行比较。

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

最终选择权在您手中,因为您最了解您的特定应用程序。您不仅要比较解决方案的单节点性能,还要比较开发时间和可扩展性等因素。

【讨论】:

  • 当然,MattJ,您对可扩展性的看法是完全正确的。但是,我需要知道两个平台之间存在哪些性能差异。身份验证、路由.. 还没有在我的首要任务列表中。
  • 我的意思是他们应该是。您的应用程序需求应预先确定,然后应稍后提出有关实施的性能问题。您也会知道 Node.js+websocket 可能缺少 XMPP 提供的某些功能是一个多么大的问题。但如果你确实需要 XMPP 的功能,Google 和 Facebook 就是证明它可以成功扩展的证据。
  • 我查看了 xmpp 提供的功能。正如我所说,每台机器的性能和并发用户总数对我来说更重要。
【解决方案2】:

我已经使用 Node.js 为客户构建了几个聊天服务,虽然我可以说使用 Node.js 运行基本的聊天服务很容易,但如果出现这种情况,您可能会花费大量时间重新发明轮子你选择走这条路。像 eJabberd 这样的 XMPP 服务器有很多内置功能,您不必重新构建。身份验证、多用户聊天、审核(踢/禁止/忽略)、用户偏好、日志记录等。

对于我从事的项目,eJabberd 肯定是矫枉过正,因为它们只需要基础知识,但在做出决定之前,您应该仔细考虑您的用例。

我正在考虑为 XMPP 创建一个 Node.js Web 客户端,以制作类似于 Campfire 的东西,但使用 eJabberd 作为其后端。我实际上并没有承诺这样做,但我认为这将是两全其美的好方法。

【讨论】:

    【解决方案3】:

    这还取决于您正在编写什么样的客户端:基于浏览器的客户端使用 BOSH,它是基于 HTTP 的 XMPP,它使用长轮询(类似于彗星)。这会从每个客户端每 30 秒(取决于设置)至少创建一个请求,在您获得几千个客户端后开始累加。我很想看看这方面的比较 - 似乎网络套接字应该在那里有优势。

    【讨论】:

    • 当然,现在您可以在 websockets 上使用 XMPP 并获得两全其美。
    猜你喜欢
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 2012-02-11
    • 1970-01-01
    相关资源
    最近更新 更多