Node.js php peformance


Node.js php peformance

这是我预期的场景:我有一个用PHP编写的应用程序,它有一个域层(包括验证器等)。 我想将 node.js 用于我的 Web 服务,以提高在高并发情况下的性能。 如果我为我的 php 域层创建一个命令行界面(见下文),这会给我带来比只使用 Apache 更好的性能吗? 这甚至是一个好方法吗? 我是节点新手.js并且正在努力了解自己的方向。 节点:域层的命令行界面将返回 json 编码的对象。

//Super simple example:
var http = require("http");
var exec = require('child_process').exec;
function onRequest(request, response) {
  exec("php domain-cli.php -model Users -method getById -id 32", function(error, stdout, stderr){
      response.writeHead(200, {"Content-Type": "application/json"});
      response.write(stdout);
      response.end();
  });
}
http.createServer(onRequest).listen(80);

这会给我带来比只使用 Apache 更好的性能吗?

你必须衡量它才能确定,但我非常怀疑。

Node的性能优势在于它是一个基于select()的服务器,因此它避免了线程和阻塞(使用昂贵的上下文切换和CPU管道停滞),转而支持非阻塞IO(又名绿色线程)。 如果你把所有的工作都卸载到PHP,那么你基本上只是使用Node作为前端服务器——此时你应该使用Apache,因为mod_php几乎完全可以做你正在做的事情。 只有mod_php才能做得更好,因为它可以使PHP解释器在内存中保持热度,而不必像您那样在每个请求上启动一个新的解释器。

这甚至是一个好方法吗?

从本质上讲,你所做的是使用Node重新实现CGI。所以我会说不 - 如果CGI是你想要的,有很多现有的实现!

您的代码将为每个客户端请求生成一个新的 php 进程。不好!像 Apache 这样的 Web 服务器通常具有保持打开状态以处理多个客户端请求的子进程,因此不必生成新进程。在这些情况下,PHP 也作为模块运行,因此不必为其创建一个进程来执行 php 脚本,它已经在内存中等待。