Batas default untuk Emitter Peristiwa adalah 10. Anda dapat meningkatkannya dengan emitter.setMaxListeners. Saran saya adalah untuk tidak mengubahnya kecuali dan sampai diperlukan secara eksplisit, pendengar meningkat karena Anda tidak berhenti berlangganan. Sekarang ke kode Anda.
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) });
});
}
});
};
Sekarang jika kita menganalisis kode di atas maka jika Anda membuka 20 koneksi soket ke server Anda, itu akan berlangganan 20 kali, ini salah. Sekarang jika kebutuhan Anda adalah mendengarkan pesan yang dipublikasikan di Redis di tingkat server dan kemudian memancarkannya di io maka kode Anda harus seperti di bawah ini
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));
});
}
});
};