节点js - 委托请求之前的集群延迟

时间:2017-04-07 07:20:36

标签: node.js cluster-computing

我正在使用带有node.js的集群模块来受益于多个cpu核心(在我的情况下为4)。问题是,如果工作人员忙,则下一个请求仅在大约10秒后委托给另一个可用工作人员,这是不可接受的。我正在使用无限循环来测试集群,如下所示:

var cluster = require ('cluster');

if (cluster.isMaster) {
    var cpuCount = require('os').cpus().length;
    for (var i = 0; i < cpuCount-1; ++i) {
        cluster.fork();
    }  
} else {
    var express = require('express');
    var app = express();

    app.get('/', function (req, res) {
        console.log('Served by worker %d!', cluster.worker.id);
        while(true) {}
        console.log("done");
        res.status(200).send();
    });

    app.listen(8080, function () {
        console.log('Worker %d running!', cluster.worker.id);
    }); 
}

cluster.on('exit', function (worker) {
    console.log('Worker %d died :(', worker.id);
    cluster.fork();
});

首先我在浏览器中打开localhost:8080,并立即打印“由工人1服务”的日志消息。然后我在新标签页中打开同一页面,仅在10秒后,打印出“由工人2服务”。为什么会这样,以及如何将请求立即委托给可用的工作人员?

1 个答案:

答案 0 :(得分:0)

哪个核心运行load-balancer方法?也许平衡器太忙了,因为无限循环将请求发送到其他应用程序。

实际上for..loop同步工作,如果load-balancer方法与loop位于同一应用和核心,那么如果存在无限循环,则负载均衡器将无法工作。

我强烈建议使用PM2来创建群集。一个已经开发多年的图书馆提供的远远超出了您的期望。

祝你好运..