Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MaxListenersExceededWarning:Wykryto możliwy wyciek pamięci EventEmitter. Dodano 11 nasłuchiwaczy wiadomości. Użyj emitter.setMaxListeners(), aby zwiększyć limit

Domyślny limit Emiter zdarzeń wynosi 10. Możesz go zwiększyć za pomocą emitter.setMaxListeners. Sugeruję, aby nie zmieniać tego, o ile nie jest to wyraźnie wymagane, liczba słuchaczy jest większa, ponieważ nie zrezygnowałeś z subskrypcji. Teraz do Twojego kodu.

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

Teraz, jeśli przeanalizujemy powyższy kod, to jeśli otworzysz 20 połączeń gniazdowych ze swoim serwerem, zasubskrybujesz 20 razy, tutaj idzie źle. Teraz, jeśli Twoim wymaganiem jest nasłuchiwanie wiadomości opublikowanej na Redis na poziomie serwera, a następnie jej wyemitowanie na io twój kod powinien wyglądać jak poniżej

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zrobić tabelę mysql z kolumnami daty i czasu?

  2. Kiedy przechowywać obrazy w bazie danych (mySQL), a kiedy nie? (Łączenie obrazu z elementem w bazie danych)

  3. php:jak zmienić dane ciągu na dane liczbowe

  4. Jak rozwiązać problem kodowania znaków MySQL?

  5. Korzystanie z przygotowanych instrukcji za pomocą mysql w pythonie