6

現在、node.js と 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) );
    });
}

join と disjoin イベントをリッスンしたいので、私の質問は、これらの 2 つのイベントをリッスンするために 2 つの redisclient を使用する必要があるかどうかです。

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

または、1 つの redisclient を使用して、コールバック内のロジックをリッスンして分離します

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

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

4

1 に答える 1

11

同じ Redis 接続を安全に再利用して複数のチャネルをサブスクライブできますが、同じ接続を使用して他の (サブスクリプションに関連しない) タスクを実行することはできません。Redisのドキュメントには次のように記載されています。

クライアントがサブスクライブ状態に入ると、追加の SUBSCRIBE、PSUBSCRIBE、UNSUBSCRIBE、および PUNSUBSCRIBE コマンドを除いて、他のコマンドを発行することは想定されていません。

私は常に Node で単一の Redis 接続を使用して、サブスクライブしたチャネルをリッスンします。

于 2013-10-18T16:37:13.200 に答える