ईवेंट एमिटर के लिए डिफ़ॉल्ट सीमा 10 है। आप इसे emitter.setMaxListeners के साथ बढ़ा सकते हैं। मेरा सुझाव है कि इसे तब तक न बदलें जब तक कि स्पष्ट रूप से आवश्यक न हो, श्रोताओं की संख्या बढ़ जाती है क्योंकि आपने सदस्यता समाप्त नहीं की है। अब आपके कोड पर।
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) });
});
}
});
};
अब यदि हम उपरोक्त कोड का विश्लेषण करते हैं तो यदि आप अपने सर्वर से 20 सॉकेट कनेक्शन खोलते हैं तो यह 20 बार सदस्यता लेगा, यहां यह गलत हो रहा है। अब यदि आपकी आवश्यकता सर्वर स्तर पर रेडिस पर प्रकाशित संदेश को सुनना है और फिर इसे उत्सर्जित करना है io पर तो आपका कोड नीचे जैसा होना चाहिए
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));
});
}
});
};