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 ответа

строка 500 cluster.js

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.

Другие вопросы по тегам