【发布时间】:2012-03-19 15:34:53
【问题描述】:
我正在尝试编写基于 node.js 的 http 服务器来响应更新客户端记录的请求。这些请求要求服务器在服务器端执行工作,但执行请求不需要等待服务器端工作完成。
我的代码如下所示:
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 的进程。太多同时处理的进程会使服务器不堪重负。
相反,我只想同时运行一个这样的进程。我该怎么做?
【问题讨论】:
标签: node.js fork nonblocking