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