sql >> Databáze >  >> RDS >> Mysql

MaxListenersExceededWarning:Bylo zjištěno možné únik paměti EventEmitter. Přidáno 11 posluchačů zpráv. Ke zvýšení limitu použijte emitter.setMaxListeners().

Výchozí limit pro Event Emitter je 10. Můžete jej zvýšit pomocí emitter.setMaxListeners. Můj návrh je neměnit to, pokud a dokud to nebude výslovně vyžadováno, nezvýší se počet posluchačů, protože jste se neodhlásili. Nyní k vašemu kódu.

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

Nyní, když analyzujeme výše uvedený kód, pak pokud otevřete 20 soketových připojení k vašemu serveru, přihlásí se 20krát, zde je to špatně. Nyní, pokud je vaším požadavkem poslouchat zprávu publikovanou na Redis na úrovni serveru a poté ji odeslat na io by pak váš kód měl vypadat takto

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. Ověřování pomocí starého hesla již není podporováno, použijte hesla ve stylu 4.1

  2. Uložit obrázek do databáze blob; načíst z db do Pictureboxu

  3. Pokud používáte indexovaná zobrazení a SLOUČENÍ, přečtěte si toto!

  4. Jarní data JPA:získávání V n-tice výsledků nebyly nalezeny žádné aliasy! chyba při provádění vlastního dotazu