sql >> Database teknologi >  >> RDS >> Mysql

MaxListenersExceededWarning:Mulig EventEmitter-hukommelseslækage detekteret. 11 meddelelseslyttere tilføjet. Brug emitter.setMaxListeners() for at øge grænsen

Standardgrænsen for hændelsesudsender er 10. Du kan øge den med emitter.setMaxListeners. Mit forslag er ikke at ændre det, medmindre og indtil det udtrykkeligt kræves, antallet af lyttere øges, fordi du ikke har afmeldt abonnementet. Nu til din kode.

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

Hvis vi nu analyserer ovenstående kode, så hvis du åbner 20 socket-forbindelser til din server, vil den abonnere 20 gange, her går det galt. Nu, hvis dit krav er at lytte efter beskeden offentliggjort på Redis på serverniveau og derefter udsende den på io, så skulle din kode være som nedenfor

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. Hvad er det maksimale antal tegn for NVARCHAR(MAX)?

  2. Python MySql Insert virker ikke

  3. ADO.NET-udbyderen med det invariante navn 'MySql.Data.MySqlClient' er enten ikke registreret i maskinens eller applikationens konfigurationsfil

  4. hvordan man importerer fra MS Excel til MYSQL DB