如何使用NodeJS动态订阅Redis频道

时间:2014-05-04 04:21:31

标签: node.js redis

在下面的代码中,我有数组频道,它会在应用启动时处理。

我遇到了一个问题,试图通过/ channels / add / id路由动态添加和订阅新的redis频道。

这甚至可能吗? (能够重新初始化通道数组,然后订阅新通道吗?)

我目前唯一的想法是如何实现将通道名称写入文件,然后在启动时读取并让cron重新启动应用程序。这将是一个非常糟糕的方法,我希望有一个更好的解决方案。

感谢您的时间。

var express = require("express");
var app = express();
var port = 3000;
var fs = require("fs");
var redis = require("redis");
var channel = [];
var channels = ['channel1', 'channel2'];

var http = require('http');
http.createServer(function(req, res) {
});

app.set('views', __dirname + '/tpl');
app.set('view engine', "jade");
app.engine('jade', require('jade').__express);

app.get("/", function(req, res) {
    res.render("page");
});

app.get('/channel/add/:id', function(req, res) {
    var c = channels.length + 1;
    channel[c] = redis.createClient();
    channel[c].subscribe(req.params.id);
    channel[c].on("message", function(channel, message) {
        io.sockets.emit('message', {message: message, channel: channel});
    });
    res.send('Channel Started: ' + req.params.id);
});

app.get('/channel/list', function(req, res) {
    res.send(JSON.stringify(channels));
});


app.use(express.static(__dirname + '/public'));
var io = require('socket.io').listen(app.listen(port));
console.log("Listening on port " + port);

for (var i in channels) {
    channel[i] = redis.createClient();
    channel[i].subscribe(channels[i]);
    channel[i].on("message", function(channel, message) {
        io.sockets.emit('message', {message: message, channel: channel});
    });
}

1 个答案:

答案 0 :(得分:0)

为什么不直接在redis中存储频道列表?这样你就可以从已有的东西中获得更多的使用(与安装MySQL或其他数据库来存储信息相比)。