对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(信誉限制),或选择群集作为标记。如果有人可以正确标记这个......
答案 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);
});