使用socket.io时redis得到警告:检测到可能的EventEmitter内存泄漏.11添加了消息监听器

时间:2016-10-28 19:19:52

标签: node.js redis socket.io

完成错误消息.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);

enter image description here

  

这真的是一个修复或解决方法sub.setMaxListeners(0);。我做错了导致泄漏。这个代码修复了警告。但是如果我重新加载浏览器几次并且   输入一条消息。我在终端上多次获取。   添加上面的图片以供参考。

chat-channelName hello-msg

0 个答案:

没有答案