当使用redis获取警告时使用socket.io:可能的EventEmitter内存泄漏检测。添加消息侦听器

完整的错误使用socket.io和redis时,Msg.I会得到这个错误。所有的都是最新的包。我运行v4.5.0节点。

(节点)警告:检测到可能的EventEmitter内存泄漏。 添加了11个消息监听器。 使用emitter.setMaxListeners()来增加RedisClient.addListener的限制

我得到这个错误消息,如果我重新加载浏览器几次。我发现一个很古老的问题 ,并提到它被修补。

仅供参考,我在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和会话相关的代码。

斌/ WWW

 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); 。我做错了,导致泄漏。这个代码修复了这个警告。但是,如果我重新加载浏览器多次,并input一条消息。我得到它在terminal多次。 以上图片为参考。

 chat-channelName hello-msg