0

这是我预期的场景:我有一个用 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);
4

2 回答 2

5

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

您必须对其进行测量才能确定,但​​我对此表示高度怀疑。

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

这甚至是一个好方法吗?

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

于 2012-06-25T05:26:03.460 回答
1

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

于 2012-06-25T05:25:26.923 回答