PHP - 有什么方法可以控制流程执行吗?

标签 php node.js process node-canvas

我的服务器上安装了 phpnodejs。我正在通过 php

调用使用 node canvasnodejs 代码

喜欢:

<?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/

相关文章:

javascript - D3.js 不显示图表

node.js - 如何读取大文件并将其上传到 s3?

php - 如果用户在过去 60 天内未在 codeigniter 中登录,则重定向到重置密码页面

Javascript 以前可以工作,但现在不行了

node.js - CastError:在模型“页面”的路径“_id”处,对于值“5be86bf8170c2c22f8bb93a6”的强制转换为ObjectId失败

c++ - 无需 fork/exec、popen() 和 system() 即可获取 linux 信息

c++ - Waitpid和同步问题

c - C语言进程同步

php - SELECT COUNT(*) 是否适用于 MySQLi 准备好的语句?

javascript - 根据接收到的字符将文本转换为链接