Ошибка Node.js: ошибка [ERR_IPC_CHANNEL_CLOSED]

У меня есть простое приложение Node.js, использующее липкую сессию, экспресс и socket.io. Я проверил файлы библиотеки Sticky-session, и он должен порождать нового воркера, как только один из других умирает, поэтому я протестировал, чтобы выйти из процесса на одном из воркеров. Но теперь вместо создания только нового воркера все мое приложение вылетает из строя и выдает мне эту ошибку:

emitting message: adad . socket.id=YcaiZWUFKlF12lD9AAAB . pid = 11448
emitting message: adadadad . socket.id=YcaiZWUFKlF12lD9AAAB . pid = 11448

events.js:182
      throw er; // Unhandled 'error' event
      ^

Error [ERR_IPC_CHANNEL_CLOSED]: channel closed
    at ChildProcess.target.send (internal/child_process.js:590:16)
    at Worker.send (internal/cluster/worker.js:54:28)
    at Server.<anonymous> (C:\Users\name\Desktop\socket.io + node cluster + redis WORKING\node_modules\sticky-session\lib\sticky-session.js:54:14)
    at emitOne (events.js:115:13)
    at Server.emit (events.js:210:7)
    at TCP.onconnection (net.js:1554:8)

Вот мой серверный код

var express = require('express');
var http = require('http');
var sticky = require('sticky-session');

var expressHandler = require("./handlers/expressHandler")
var redisHandler = require("./handlers/redisHandler")
var ioSocketHandler = require("./handlers/socketHandler")

var config = require("./configuration/default")
var port = config.web.port;
var workers = config.system.cores

var app = express();


///////////////////////////////////
//      HTTP SERVER
///////////////////////////////////

sticky(workers, function() {

  var server = http.createServer(app);

  var io = require('socket.io')(server);

  redisHandler(io)

  ioSocketHandler(io)

  return server;

}).listen(port, function() {

  console.info(`server started on port ${port}. process id = ${process.pid}`);

});


///////////////////////////////////
//      EXPRESS
///////////////////////////////////

expressHandler(app)

И вот экспресс-модуль, который намеренно вызывает ошибку

var config = require("../configuration/default")
var cookieParser = require('cookie-parser');
var session = require("express-session")({
    secret: config.cookie.secret,
    resave: true,
    saveUninitialized: true
})

function initialiseExpressHandlers(app) {

    app.use(cookieParser());

    session.Cookie

    app.use(session);

    app.get('/', function(req, res) {
        console.info(req.session)
        res.sendfile('index.html');
    });

    app.get('/kill', function(req, res) {
        process.exit(1);
    });

}

module.exports = initialiseExpressHandlers

И, наконец, Redis Adaptar, который я использую для обработки socket.io в кластере. Другой код не должен иметь значения.

var redis = require('redis');
var redisAdapter = require('socket.io-redis');

function initialiseRedisHandler(io) {

    var redisUrl = process.env.REDISTOGO_URL || 'redis://127.0.0.1:6379';
    var redisOptions = require('parse-redis-url')(redis).parse(redisUrl);
    var pub = redis.createClient(redisOptions.port, redisOptions.host, {
        detect_buffers: true,
        auth_pass: redisOptions.password
    });
    var sub = redis.createClient(redisOptions.port, redisOptions.host, {
        detect_buffers: true,
        auth_pass: redisOptions.password
    });

    io.adapter(redisAdapter({
        pubClient: pub,
        subClient: sub
    }));
    console.info('Redis adapter started with url: ' + redisUrl);

}

module.exports = initialiseRedisHandler

какую версию Node вы используете?

user9081620 27.03.2018 08:53

Я использую v8.7.0

user8622254 27.03.2018 09:04

похоже, что много ошибок, связанных с этим, возникли недавно (т.е. в конце 2017 года), вы можете попробовать обновить свой узел до версии 9 +?

user9081620 27.03.2018 09:20

Я только что обновился до 9.9, но все равно выдает ошибку.

user8622254 27.03.2018 14:34
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
4
2 831
0

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