NodeJS Cluster неожиданно assert.AssertionError
Я сталкиваюсь со странной ошибкой, это мой основной файл.js
var cluster = require('cluster'),
express = require('express'),
http = require('http');
if (cluster.isMaster) {
var cpuCount = require('os').cpus().length;
for (var i = 0; i < cpuCount; i += 1) {
cluster.fork();
}
} else {
var app = express(),
server = http.createServer(app),
io = require('socket.io').listen(server);
io.set('log level', 2);
server.listen(3000);
}
cluster.on('exit', function (worker) {
console.log('Worker ' + worker.id + ' died :(');
cluster.fork();
});
Это сообщение об ошибке, которое я получаю..
Worker 1 died :(
Worker 2 died :(
assert.js:92
throw new assert.AssertionError({
^
AssertionError: false == true
at Cluster.cluster.fork (cluster.js:500:3)
at Cluster.<anonymous> (/xxx/x/xxx/xxx/xxxxx.js:21:13)
at Cluster.EventEmitter.emit (events.js:106:17)
at process.<anonymous> (cluster.js:341:13)
at process.g (events.js:180:16)
at process.EventEmitter.emit (events.js:95:17)
at process.exit (node.js:707:17)
at process.<anonymous> (cluster.js:545:15)
at process.g (events.js:180:16)
at process.EventEmitter.emit (events.js:117:20)
assert.js:92
throw new assert.AssertionError({
^
AssertionError: false == true
at Cluster.cluster.fork (cluster.js:500:3)
at Cluster.<anonymous> (/xxx/x/xxx/xxx/xxxxx.js:21:13)
at Cluster.EventEmitter.emit (events.js:106:17)
at process.<anonymous> (cluster.js:341:13)
at process.g (events.js:180:16)
at process.EventEmitter.emit (events.js:95:17)
at process.exit (node.js:707:17)
at process.<anonymous> (cluster.js:545:15)
at process.g (events.js:180:16)
at process.EventEmitter.emit (events.js:117:20)
Понятия не имею, что не так там помощь?
Обзор аппаратного обеспечения:
Model Name: MacBook
Model Identifier: MacBook5,2
Processor Name: Intel Core 2 Duo
Processor Speed: 2.13 GHz
Number of Processors: 1
Total Number of Cores: 2
L2 Cache: 3 MB
Memory: 2 GB
Bus Speed: 1.07 GHz
Boot ROM Version: MB52.0088.B05
SMC Version (system): 1.38f5
Sudden Motion Sensor:
State: Enabled
Версия системы: OS X 10.9.1 (13B42)
Версия ядра: Дарвин 13.0.0
$ uname -a
Darwin Nikhils-MacBook.local 13.0.0 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT 2013; root:xnu-2422.1.72~6/RELEASE_X86_64 x86_64
$ node --version
v0.10.24
$ npm --version
1.3.21
2 ответа
assert(cluster.isMaster);
то есть ты звонишь fork
от другого работника (или Node думает, что вы).
Если двигать cluster.on('exit'
слушатель в if (cluster.isWorker)
Блок не решает проблему, поэтому я думаю, что вы должны открыть проблему на Github, так как я не могу понять, почему событие будет отправлено на каких-либо работников.
Редактировать: это действительно была ошибка.
Была такая же проблема - это сейчас работает:
cluster.on('disconnect', function(worker) {
if (this.isMaster) {
console.log('worker ' + worker.process.pid + ' disconnected');
cluster.fork();
}
});
на что ссылается @OrangeDog.