【问题标题】:Get online users - node.js vs php+mysql [closed]获取在线用户 - node.js vs php + mysql [关闭]
【发布时间】:2013-05-15 13:25:34
【问题描述】:

我正在为一个客户端开发一个 Web 应用程序,该应用程序需要我知道当前在线的所有用户的姓名。整个应用程序是用 php 构建的,其中 jQuery 用于前端交付。但是,我发现我可以设置一个独立的 Node.js 服务器来持续监控用户。

我最初的设计让我在每个页面的顶部都包含一个查询脚本,用于检查数据库的更新。我将其升级为使用 $.post() 从服务 php 页面获取响应的 js。

我需要知道的是,如果我每次都使用 node.js 而不是标准的 mysql 访问,那么使用 node.js 会对性能产生什么样的影响??甚至可能吗? 该应用程序将同时有 500 到 1000 人在线,因此我的客户强调性能。

此外,如果这样的解决方案是可行的,任何关于我应该如何实施它的帮助都将非常受欢迎。

【问题讨论】:

    标签: php performance node.js web-applications


    【解决方案1】:

    通过使用 Node.js,您可能会看到巨大的性能提升。在线用户列表可以很容易地保存在 Node.js 中的内存中,您甚至根本不需要访问数据库。

    当用户列表请求进来时,您可以将请求用户添加到用户列表数据结构中,然后返回列表。为每个用户保留最后访问时间。使用setInterval 定期(每秒一次)运行一个函数以循环遍历列表并消除任何一段时间内未请求该列表的用户。

    由于该列表将保存在 Node.js 进程的内存中,因此不会有数据库访问,并且请求将得到极快的处理。

    【讨论】:

    • 这就是我的想法:D。感谢您的建议,我对此感到非常困惑。如果您不介意回答,请再问一个问题-我的客户的主机使用带有 cPanel 的 LAMP。 node.js 应用程序会在上面运行吗?
    • 只要你能获得 shell 访问权限,你就可以使用 Node。如果您可以获得 shell 访问权限但不能获得 root 访问权限,那么您必须在高于 1024 的端口上运行 Node,例如 8080。但出于您的目的,我认为在端口 8080 而不是端口 80 上运行会很好。但是,您的主机可能有其他端口防火墙。所以这真的取决于。您还可以在 Heroku 或其他主机上运行,​​并使用 CORS 进行跨域 ajax 调用。
    • 嗯,我不知道 CORS 是什么。另外,我想知道如何将用户详细信息从我的 php 获取到 node.js 服务器。我查了Elephand.io,但我仍然不确定这是否能满足我想要做的事情。
    【解决方案2】:

    您要求的数字很难给出,因为它取决于您的系统,但是,如果您在网络上查看 node.js 基准测试,您会发现在这种情况下 node.js 明显优于 PHP 或其他网络技术。 我推荐使用 socket.io 模块(你可以在他们的网站上找到 http://socket.io/ 很多例子)。
    如果您的主机支持 websockets,那么 socket.io 具有惊人的性能。 我不知道的唯一变量是 mySql 的性能,因为大多数 node.js 开发人员都使用 nosql,例如 mongodb。

    【讨论】:

    • 我更多地按照 Daneil 的建议进行思考。因为所需数据的大小是如此之小,所以在我的书中只为它执行查询是没有意义的。我什至正在研究 Java 服务器作为一种选择。但毫无疑问,node.js 似乎是要走的路。干杯并感谢 socket.io 提及,在我看到你的答案之前我正在调查它。 :)
    • Daniel 的解决方案看起来确实非常好。
    猜你喜欢
    • 2019-12-17
    • 2012-10-28
    • 2010-10-07
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多