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