首页 文章

NodeJS Cluster2 - 通过pid识别哪个群集正在响应请求

提问于
浏览
0

对快速应用程序使用cluster2示例:(https://github.com/ql-io/cluster2

var Cluster = require('cluster2'),
    express = require('express');
var app = express.createServer();

var = clusterID;

app.get('/', function(req, res) {
    console.log("Cluster: ", clusterID);
    res.send('hello');
});

var c = new Cluster({
    port: 3000,
});

c.on('forked', function(pid) {
    clusterID = pid;
    console.log('Worker ' + pid + ' forked');
});

c.listen(function(cb) {
    cb(app);
});

我正在尝试确定哪个群集正在响应'/'的get请求 .

当工作者分叉时,试图捕获变量中的pid是不起作用的,我不明白为什么 .

这是我的解决方案,但是除了'forked'函数之外,所有情况下都没有定义clusterID . (我在第5行添加了变量clusterID,在get('/'...语句中添加了console.log,并在分叉该worker时将var clusterID设置为相应的pid .

我的印象是分叉工作者都使用了他们自己的服务器实例,因此在实例的持续时间内,一旦该工作者被分叉,就会设置pid . 这是不正确的?

谢谢

注 - 我无法创建标记cluster2(信誉限制),或选择群集作为标记 . 如果有人可以正确标记这个...

1 回答

  • 0

    即使在集群工作者中, process.pid 也会为您提供当前的pid . 这样可行:

    var Cluster = require('cluster2'),
        express = require('express');
    var app = express();
    
    app.get('/', function(req, res) {
        console.log("Cluster: ", process.pid);
        res.send('hello');
    });
    
    var c = new Cluster({
        port: 3000,
    });
    
    c.on('forked', function(pid) {
        console.log('Worker ' + pid + ' forked');
    });
    
    c.listen(function(cb) {
        cb(app);
    });
    

相关问题