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

时间:2015-05-12 15:53:37

标签: node.js

对Express应用程序使用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 :(得分: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);
});