我的服务器上安装了 php
和 nodejs
。我正在通过 php
node canvas
的 nodejs
代码
喜欢:
<?php
exec(node path/to/the/js/file);
?>
问题:
由于 Node Canvas
,此执行的每个进程都会消耗大约250 Mb内存。因此,如果我的服务器有大约 8Gb 内存,则在任何给定时间点只有 32 个用户可以使用该服务,并且如果内存数量超过 10GB,则存在服务器崩溃的风险。用户数量超过。
这个问题有没有可扩展的解决方案?
更新 由于我的业务需求,我必须使用 Canvas
服务器端,所以我使用 node canvas
,但它非常消耗内存带来了很大的问题。
最佳答案
你的问题是你为每个请求启动一个新的node.js进程,这就是内存占用如此巨大的原因,而这并不是node.js的构建目的。
但是 Node.js 的构建目的是在一个进程中处理许多不同的请求,利用这一点来发挥你的优势。
我建议您只启动一个 Node.js 进程,并找到另一种方式在 PHP 进程和 Node.js 进程之间进行通信。
有很多不同的方法可以做到这一点,有些方法比其他方法更有效,有些方法比其他方法更难构建。它们各有利弊,但由于两者都是与 Web 相关的语言,因此您可以确定两者都支持 HTTP 请求。
因此,您应该做的是一个基本的 Node.js/Express 服务器,可能只有一个 API 点,它执行您已经执行的代码,并返回结果。这很容易做到(特别是如果您使用 JSON 在它们之间进行通信),虽然我不懂 PHP,但我很确定发送 HTTP 请求并解释答案很容易。
如果您准备好深入研究 Node.js,您可以尝试套接字或 MQ,它们应该具有更高的性能。
这样,您就只有一个 node.js 进程,该进程不会增加内存并处理更多客户端,也不必使用 exec
,并且可以第一次尝试使用 Express .
关于PHP - 有什么方法可以控制流程执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43182267/