2013-10-18 93 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連接來收聽訂閱的頻道。