我正在尝试让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?