在下面的代码中,我有数组频道,它会在应用启动时处理。
我遇到了一个问题,试图通过/ 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});
});
}
答案 0 :(得分:0)
为什么不直接在redis中存储频道列表?这样你就可以从已有的东西中获得更多的使用(与安装MySQL或其他数据库来存储信息相比)。