Я пытаюсь написать http-сервер на основе node.js, который отвечает на запросы на обновление клиентских записей. Эти запросы просят сервер выполнить работу на стороне сервера, но этот запрос не требует ожидания завершения работы на стороне сервера.
Мой код выглядит так:
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
одновременно. Слишком много одновременных процессов приведет к перегрузке сервера.
Вместо этого я хочу, чтобы одновременно выполнялся только один такой процесс. Как я могу это сделать?