0

私が予想するシナリオは次のとおりです。ドメインレイヤー(バリデーターなどを完備)を持つPHPで記述されたアプリがあります。同時実行性の高い状況でのパフォーマンスのために、Webサービスにnode.jsを使用したいと思います。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を使用するよりも優れたパフォーマンスが得られますか?

確実に測定する必要がありますが、私はそれを非常に疑っています。

ノードはselect()ベースのサーバーであるため、パフォーマンス上の利点があります。そのため、非ブロッキングIO(別名グリーンスレッド)を優先して、スレッド化とブロッキング(高価なコンテキストスイッチとCPUパイプラインストールを使用)を回避します。すべての作業をPHPにオフロードする場合、基本的にはノードをフロントエンドサーバーとして使用しているだけです。mod_phpはほぼ正確に実行しているため、この時点ではApacheを使用する必要があります。mod_phpだけがそれをより良くすることができます。なぜなら、あなたがしているようにすべてのリクエストで新しいインタープリターを起動する必要がなく、PHPインタープリターをメモリー内でホットに保つことができるからです。

これはこれを行うための良い方法でもありますか?

基本的に、Nodeを使用してCGIを再実装します。だから私はノーと言います-CGIがあなたが望むものであるなら、そこにはたくさんの既存の実装があります!

于 2012-06-25T05:26:03.460 に答える
1

あなたのコードは、すべてのクライアントリクエストに対してphpの新しいプロセスを生み出します。良くない!ApacheなどのWebサーバーには通常、複数のクライアント要求を処理するために開いたままの子プロセスがあるため、新しいプロセスを生成する必要はありません。このような場合、PHPもモジュールとして実行されるため、phpスクリプトを実行するためにPHPのプロセスを作成する必要はなく、すでにメモリ内に待機しています。

于 2012-06-25T05:25:26.923 に答える