Giới hạn mặc định cho Trình phát sự kiện là 10. Bạn có thể tăng nó bằng emitter.setMaxListaries. Đề xuất của tôi là không thay đổi nó trừ khi và cho đến khi được yêu cầu rõ ràng, người nghe sẽ tăng lên vì bạn đã không hủy đăng ký. Bây giờ đến mã của bạn.
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) });
});
}
});
};
Bây giờ nếu chúng ta phân tích đoạn mã trên thì nếu bạn mở 20 kết nối socket đến máy chủ của bạn, nó sẽ đăng ký 20 lần, đây là lỗi. Bây giờ nếu yêu cầu của bạn là lắng nghe thông báo được xuất bản trên Redis ở cấp máy chủ và sau đó phát ra nó trên io thì mã của bạn sẽ giống như dưới đây
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));
});
}
});
};