Javascript Node.js错误:错误[ERR\u IPC\u CHANNEL\u CLOSED]

Javascript Node.js错误:错误[ERR\u IPC\u CHANNEL\u CLOSED],javascript,node.js,ecmascript-6,socket.io,Javascript,Node.js,Ecmascript 6,Socket.io,我有一个简单的Node.js应用程序,使用sticky session、express和socket.io。 我已经检查了Sticky会话库文件,当另一个工作进程死亡时,它应该会生成一个新的工作进程,因此我测试了在其中一个工作进程上退出一个进程。但现在,我的整个应用程序崩溃了,并出现以下错误,而不是只创建一个新的worker: emitting message: adad . socket.id=YcaiZWUFKlF12lD9AAAB . pid = 11448 emitting messag

我有一个简单的Node.js应用程序,使用sticky session、express和socket.io。 我已经检查了Sticky会话库文件,当另一个工作进程死亡时,它应该会生成一个新的工作进程,因此我测试了在其中一个工作进程上退出一个进程。但现在,我的整个应用程序崩溃了,并出现以下错误,而不是只创建一个新的worker:

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)
这里是express模块,它故意导致错误

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.log(req.session)
        res.sendfile('index.html');
    });

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

}

module.exports = initialiseExpressHandlers
最后是我用来处理集群中socket.io的Redis Adapter。其他代码应该是无关的

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.log('Redis adapter started with url: ' + redisUrl);

}

module.exports = initialiseRedisHandler

您正在运行哪个版本的节点?我使用的是v8.7.0。看起来与此相关的许多错误都是最近发生的(即2017年底),您可以尝试将节点更新到v9+?我刚刚更新到9.9,但它仍然会抛出错误。
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.log('Redis adapter started with url: ' + redisUrl);

}

module.exports = initialiseRedisHandler