当前,我正在使用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事件,我的问题是我是否应该使用两个redisclient来听这两个事件,例如
redisClient1.psubscribe('room/*/user/*/join'); redisClient2.psubscribe('room/*/user/*/disjoin');
或者只是使用一个redisclient来监听和分离回调中的逻辑
redisClient2.psubscribe('room/*/user/*');
我知道这两种方式都是可行的,但是我不知道人们在哪种情况下会如何使用它们?
您可以安全地重用同一Redis连接来订阅多个频道,但不能使用同一连接来执行其他(与订阅无关的任务)。在Redis的文件中指出:
一旦客户端进入订阅状态,就不应发出任何其他命令,除了其他SUBSCRIBE,PSUBSCRIBE,UNSUBSCRIBE和PUNSUBSCRIBE命令。
我总是在Node中使用单个Redis连接来收听订阅的频道。