工人崩溃的集群行为

时间:2015-06-03 12:25:19

标签: node.js

我正在使用群集来分叉处理通过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;
    });
}

由于

0 个答案:

没有答案