クライアントレコードの更新要求に応答するnode.jsベースのhttpサーバーを作成しようとしています。これらの要求はサーバーにサーバー側の作業を依頼しますが、要求はサーバー側の作業が完了するまで待つ必要はありません。node.jsを使用して一度に1つのプロセスのみが実行されるようにプロセスをキューに入れる
私のコードは次のようになります。これは動作します
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
var sys = require('util'),
exec = require('child_process').exec,
child;
var parsed_url = require('url').parse(request.url, true) ;
var query = parsed_url['query'] ;
var client_id = query['client_id'] ;
child = exec('some_tedious_server_side_calculation ' + client_id,
function (error, stdout, stderr) {
if (error !== null) {
console.log('exec error: ' + error);
}
});
response.end('I will process ' + client_id + ' when I get around to it\n');
}).listen(8888);
console.log('Server running at http://127.0.0.1:8888/');
が、exec
が非ブロッキングであるので、私は一度にすべての要求の洪水を得れば、私はプロセスの洪水がすべて同時にsome_tedious_server_side_calculation
を実行してしまいます。同時プロセスが多すぎると、サーバーが圧倒されます。
代わりに、このようなプロセスを1つだけ同時に実行したいと思っています。これどうやってするの?
クライアントとのHTTPセッションを終了するまでジョブが完了するまで待ちたくはありません。クライアントはジョブを送信し、離れてジョブが完了することを期待しています。 – rlandster
あなたが見せてくれるアルゴリズムは、私が念頭に置いていたものではありません。Web要求がなくなっても、キューに入れられたすべてのタスクを連続して実行したいと思っています。最初からコーディングするのではなく、node.jsに組み込まれたものがあれば、これを簡単に行うことができます。 – rlandster
Node.jsにネイティブに組み込まれているものはありません。しかし、サードパーティのツールやライブラリがあります。あなたの要件を誤解しているか、あなたがそれらを誤解していない限り、Kueはそれらの1つであり、要件をうまく満たしています。 –