2013-10-18 11 views
5

現在、私はnode.jsとredisを使用してアプリケーションをビルドしています。私はredisを使用する理由はpublish/subscribe機能のためです。このアプリは、ユーザーがユーザーに入ったときや部屋の外に出たときにマネージャーに通知するだけです。redis publish/subscribeの使い方

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)); 
    }); 
} 

私が参加し、分けるイベントを聞きたいから、私の質問は ですが、私は

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

か、単に聞くために1 redisclientを使うように、これら2つのイベントが聞くために2 redisclientを使用する必要がありますし、コールバック内のロジックを分離する

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

私はこれらの2つの方法が可能であることを知っていますが、実際にどのような状態で人々がそれらを使用するのかわかりません。

答えて

10

同じRedis接続を安全に再利用して、複数のチャネルをサブスクライブすることはできますが、同じ接続を使用して他の(サブスクリプション関連ではない)タスクを実行することはできません。 Redis documentation状態:クライアントは、追加、SUBSCRIBE PSUBSCRIBEを除く、他のコマンドを発行することになっていない加入状態になり

たら、UNSUBSCRIBEとPUNSUBSCRIBEコマンド。

私は常に、ノードで1つのRedis接続を使用して、登録したチャンネルを聞きます。

関連する問題