Ok, tôi đã có câu trả lời của mình. Tôi đã rất khó khăn để tìm ra nó, đã tìm kiếm hàng giờ ...
Đây là chủ đề liên quan cho phép tôi làm cho nó hoạt động (trả lời VÀ nhận xét):
Cách xóa Redis trên trình nghe 'tin nhắn'
Và đây là mã của tôi:
io.on('connection', function(client){
console.log('Client id #'+client.id);
if (client.handshake.session) {
var user_socket_channel = client.handshake.session['user_socket_channel'];
}
var redis_listener = function(redis_channel, rawdata) {
console.log('Redis connection on '+redis_channel);
var data = JSON.parse(rawdata);
if (data.channel) { var socket_channel = data.channel; }
else {
if (user_socket_channel) { var socket_channel = user_socket_channel; }
else { var socket_channel = 'public' }
}
var rails_data = data.data;
console.log('Socket.io emiting on ['+socket_channel+']');
client.emit(socket_channel, rails_data);
};
redis_subs.on('message', redis_listener);
client.on('disconnect', function(){
console.log('Client disconnect, removing redis listener..');
redis_subs.removeListener('message', redis_listener);
});
});
Tùy thuộc vào ngữ cảnh, bạn cần gọi redis.removeListener trên sự kiện io.client.disconnect.
Đây là một giải pháp thay thế có thể xảy ra:
https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO
Nhân tiện, câu hỏi liên quan này có vẻ giống một câu hỏi tương tự với câu trả lời chính xác, nhưng không thực sự (không hoạt động). Hơn nữa, hãy xem nhận xét được đánh dấu:
Làm cách nào để sử dụng lại kết nối redis trong socket.io?