sql >> Databasteknik >  >> RDS >> Mysql

MaxListenersExceededWarning:Möjlig EventEmitter-minnesläcka upptäckt. 11 meddelandelyssnare har lagts till. Använd emitter.setMaxListeners() för att öka gränsen

Standardgränsen för Eventsändare är 10. Du kan öka den med emitter.setMaxListeners. Mitt förslag är att inte ändra det om inte och tills det uttryckligen krävs, antalet lyssnare ökar eftersom du inte har avslutat prenumerationen. Nu till din kod.

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

Om vi ​​nu analyserar ovanstående kod så om du öppnar 20 socket-anslutningar till din server kommer den att prenumerera 20 gånger, här går det fel. Om ditt krav nu är att lyssna efter meddelandet som publicerats på Redis på servernivå och sedan skicka ut det på io bör din kod vara som nedan

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. Hur avslutar jag ett skript i SQLPlus när ett fel uppstår och återgår till SQLPlus-prompten, utan att koppla bort eller avsluta SQLPlus?

  2. Hur infogar jag ett datum i mysql som en parameter?

  3. Sammanfoga/sammanfoga matrisvärden under gruppering/aggregering

  4. Lagra filer i databas kontra filsystem