1

我试图让 Redis 发布/订阅在一个小节点应用程序中工作。目前我正在使用 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?

4

0 回答 0