sql >> Database >  >> RDS >> Mysql

MaxListenersExceededWaarschuwing:mogelijk EventEmitter-geheugenlek gedetecteerd. 11 berichtenluisteraars toegevoegd. Gebruik emitter.setMaxListeners() om de limiet te verhogen

De standaardlimiet voor Event Emitter is 10. Je kunt het verhogen met de emitter.setMaxListeners. Mijn suggestie is om het niet te veranderen, tenzij en totdat het expliciet vereist is, het aantal luisteraars toeneemt omdat je je niet hebt afgemeld. Nu naar je 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) });
      });
    }
  });
};

Als we nu de bovenstaande code analyseren en als u 20 socketverbindingen naar uw server opent, zal deze zich 20 keer abonneren, hier gaat het mis. Als uw vereiste nu is om te luisteren naar het bericht dat op Redis op serverniveau is gepubliceerd en het vervolgens uit te zenden op io, dan zou je code zoals hieronder moeten zijn

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));
      });
    }
  });
};


  1. Kopieer een MySQL-tabel inclusief indexen

  2. Benchmarking van beheerde PostgreSQL-cloudoplossingen - deel één:Amazon Aurora

  3. Is het mogelijk om een ​​door de gebruiker gedefinieerde MySql-variabele te gebruiken in een .NET MySql-opdracht?

  4. De retourwaarde verkrijgen van JDBC MSSQL