0
在下面的代码中,我有通道,它在应用程序启动时处理。如何使用NodeJS动态订阅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});
});
}