我正在使用群集来分叉处理通过http / express接收的文件的工作人员。我正在测试恢复时处理使工作程序崩溃的文件(我用on('exit',...
检测到崩溃并重新分叉新工作者。)
我正在目睹一种奇怪的行为:如果中毒文件会导致工作人员崩溃,我的日志显示所有工作人员都收到文件并崩溃(而通常情况下,只有一名工人会处理非中毒文件)。在客户端,它显示HTTP请求只发送一次。有什么理由可以解释这种奇怪的行为吗?
编辑:代码提取
if (cluster.isMaster) {
cluster.on('exit', function(worker, code, signal) {
var worker = cluster.fork();
worker.on('message', function(filename) {
console.log('worker ' + worker.process.pid + ' processing ' + filename);
});
});
for (var i = 0; i < numCPUs; i++) {
var worker = cluster.fork();
worker.on('message', function(filename) {
console.log('worker ' + worker.process.pid + ' processing ' + filename);
});
}
} else {
var app = express();
app.use('/', express.static('public'));
app.use(multer({ inMemory: true }));
app.post('/detect', function(req, res) {
var image = req.files.image;
if (!image) {
res.status(400).send({ error: 'missing image' });
return;
}
process.send(image.originalname);
// some code that may crash
});
var server = app.listen(nconf.get('port'), "0.0.0.0", function () {
var host = server.address().address;
var port = server.address().port;
});
}
由于