我试图让 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?