Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MaxListenersExceededWarning:Mögliches EventEmitter-Speicherleck erkannt. 11 Nachrichten-Listener hinzugefügt. Verwenden Sie emitter.setMaxListeners(), um das Limit zu erhöhen

Das Standardlimit für Ereignis-Emitter ist 10. Sie können es mit emitter.setMaxListeners erhöhen. Mein Vorschlag ist, es nicht zu ändern, es sei denn, und bis dies ausdrücklich erforderlich ist, werden die Zuhörer erhöht, weil Sie sich nicht abgemeldet haben. Nun zu Ihrem Code.

const redis = require('redis');
const config = require('../config');
const sub = redis.createClient(config.REDIS.port, config.REDIS.host);
const pub = redis.createClient(config.REDIS.port, config.REDIS.host);

sub.subscribe('spread');

module.exports = (io) => {
  io.on('connection', (socket) => {
    // this callback will be executed for all the socket connections.
    let passport =
      socket.handshake.session.passport; /* To find the User Login  */

    if (typeof passport !== 'undefined') {
      socket.on('typing:send', (data) => {
        pub.publish('spread', JSON.stringify(data));
      });

      // this is where you are subscribing for each and every socket connected to your server
      sub.on('message', (ch, msg) => {
        // this is the Exact line where I am getting this error

        // whereas you are emitting messages on socket manager, not on the socket.
        io.emit(`${JSON.parse(msg).commonID}:receive`, { ...JSON.parse(msg) });
      });
    }
  });
};

Wenn wir nun den obigen Code analysieren und 20 Socket-Verbindungen zu Ihrem Server öffnen, wird er 20 Mal abonniert, hier läuft es schief. Wenn Sie nun die auf Redis veröffentlichte Nachricht auf Serverebene abhören und dann ausgeben möchten auf io sollte Ihr Code wie unten aussehen

const redis = require('redis');
const config = require('../config');
const sub = redis.createClient(config.REDIS.port, config.REDIS.host);
const pub = redis.createClient(config.REDIS.port, config.REDIS.host);

sub.subscribe('spread');

module.exports = (io) => {
  sub.on('message', (ch, msg) => {
    // this is the Exact line where I am getting this error
    io.emit(`${JSON.parse(msg).commonID}:receive`, { ...JSON.parse(msg) });
  });

  io.on('connection', (socket) => {
    let passport =
      socket.handshake.session.passport; /* To find the User Login  */

    if (typeof passport !== 'undefined') {
      socket.on('typing:send', (data) => {
        pub.publish('spread', JSON.stringify(data));
      });
    }
  });
};