Node.js php性能

时间:2012-06-25 05:16:29

标签: php performance node.js

这是我预期的场景:我有一个用PHP编写的应用程序,它有一个域层(包含验证器等)。我希望将node.js用于我的Web服务,以便在高并发情况下提高性能。如果我为我的php域层创建一个命令行界面(见下文),这会给我带来比仅使用Apache更好的性能吗?这甚至是一个很好的方法吗?我是node.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);

2 个答案:

答案 0 :(得分:5)

  

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

你必须要测量它,但我非常怀疑它。

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

  

这甚至是一个很好的方法吗?

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

答案 1 :(得分:1)

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