使用Node.js和Redis发布/订阅

时间:2013-03-08 10:51:29

标签: node.js redis socket.io publish-subscribe node-redis

我正在尝试让Redis pub / sub在一个小的Node应用程序中工作。目前我正在使用node-redis,我不理解pub / sub的API。看起来我可以按名称订阅频道,然后在通用的“消息”事件中收到所有频道的所有消息,如下所示:

var express = require('express')
  , app = express()
  , server = app.listen(4000) 
  , sio = require('socket.io') 
  , io = sio.listen(server)
  , db = require('redis').createClient();

  io.sockets.on('connection', function (socket) {
     db.subscribe("foo");
     db.subscribe("bar");
     db.on("message", function(channel, message) {
         socket.emit('message', message);                
     });
  });

这迫使我为每个订阅创建一个新客户端或使用类似的东西:

db.on("message", function(channel, message) {
 socket.emit(channel, message);                
});

然后收听正确的socket.io频道客户端。对我来说都不是理想的。

我想要的是在订阅时注册一个回调,所以我只接收该频道的消息,就像在这个伪代码片段中一样:

db.subscribe("foo", function(message) {
    socket.emit("foo_message", message);
});

db.subscribe("bar", function(message) {
    socket.emit("bar_message", message);
});

有人知道我的问题的干净解决方案,还是其他支持我意愿的redis API?

0 个答案:

没有答案