完成错误消息.I使用socket.io和redis.All是最新的包时出现此错误。我运行v4.5.0节点。
(节点)警告:检测到可能的EventEmitter内存泄漏。 11条消息 听众补充道。使用emitter.setMaxListeners()来增加限制 RedisClient.addListener
如果我多次重新加载浏览器,我会收到此错误消息。我发现question已经很老了,并且提到它已修补。
仅供参考我在nginx代理后运行三个节点实例。
app.js
var express = require('express');
var session = require('express-session');
var redis = require('redis');
var redisClient = redis.createClient();
var sub = redis.createClient();
var pub = redis.createClient();
var RedisStore = require('connect-redis')(session);
app = express();
var io = require('socket.io')();
var sessionMiddleware = session({
store: new RedisStore({
client:redisClient
}),
secret: 'keyboard cat',
resave: false,
saveUninitialized: true
});
io.use(function(socket, next) {
sessionMiddleware(socket.request, socket.request.res, next);
});
app.io = io;
app.use(sessionMiddleware);
//sub.setMaxListeners(0);
io.on('connection', function(socket){
sub.subscribe('chat');
socket.on('chat', function (data) {
console.log(data);
pub.publish('chat', data.msg);
});
sub.on('message', function (channel, message) {
console.log(channel, message);
socket.emit(channel, message);
});
socket.on('disconnect', function () {
//sub.quit()
//sub.unsubscribe("chat");
//I tried both above, for sub.quit() throwing error already closed.
});
});
我只添加了与redis,socket.io和sessions相关的所需代码。
仓/万维网
var app = require('../app');
var http = require('http');
var server = http.createServer(app);
var io = app.io;
io.listen(server);
server.listen(port);
这真的是一个修复或解决方法
sub.setMaxListeners(0);
。我做错了导致泄漏。这个代码修复了警告。但是如果我重新加载浏览器几次并且 输入一条消息。我在终端上多次获取。 添加上面的图片以供参考。
chat-channelName hello-msg