2013-10-18 58 views
5

目前我正在使用node.js和redis来构建应用程序,我使用redis的原因是由于发布/订阅功能。该应用程序只是在用户进入用户或不在房间时通知经理。如何使用redis发布/订阅

function publishMsg(channel , mssage){ 
    redisClient.publish(channel,JSON.stringify()); 
} 

publishMsg('room/1/user/b',{'room':1,'user':'b'}); 
publishMsg('room/1/user/c',{'room':1,'user':'c'}); 
publishMsg('room/2/user/b',{'room':2,'user':'b'}); 
publishMsg('room/2/user/c',{'room':2,'user':'c'}); 

function subscribe(pattern){ 
    redisClient.psubscribe(pattern); 
    redisClient.on('pmessage', function(pattern, channel, message){  
     console.log('on publish/subscribe ', pattern+" "+channel+" "+message+" "+ JSON.parse(message)); 
    }); 
} 

,因为我要听的连接和防脱离事件,我的问题是 我应该用两个redisclient听这两个事件,像

redisClient1.psubscribe('room/*/user/*/join'); 
    redisClient2.psubscribe('room/*/user/*/disjoin'); 

或只使用一个redisclient倾听和单独的回调

redisClient2.psubscribe('room/*/user/*'); 

我知道这两种方式都是可能的内部的逻辑,但我不知道如何在现实中人们使用它们,其中的条件?

回答

10

您可以安全地重复使用相同的Redis连接来订阅多个通道,但不能使用相同的连接执行其他(与订阅无关的)任务。该Redis documentation状态:

一旦客户端进入它不应该发出任何其他命令,除了额外的订阅,PSUBSCRIBE预订的状态,退订和PUNSUBSCRIBE命令。

我总是在Node中使用单个Redis连接来收听订阅的频道。