【问题标题】:how to use the redis publish/subscribe如何使用 redis 发布/订阅
【发布时间】:2013-10-27 12:31:09
【问题描述】:

目前我正在使用 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 and disjoin 事件,所以我的问题是 我应该使用两个redisclient来监听这两个事件吗,比如

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

或者只使用一个redisclient来监听和分离回调内部的逻辑

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

我知道这两种方式是可能的,但我不知道人们在现实中是如何使用它们的,在什么情况下?

【问题讨论】:

    标签: node.js redis publish-subscribe


    【解决方案1】:

    您可以安全地重复使用同一个 Redis 连接来订阅多个频道,但不能使用同一个连接来执行其他(非订阅相关的)任务。 Redis documentation 声明:

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

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

    【讨论】:

      猜你喜欢
      • 2015-09-04
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多