我正在使用redis作为pubsub messenger在python和node之间建立实时可视化。有一个总是运行的python脚本,它用hmset设置redis hash。如果我在Redis客户端中输入以下示例命令:“HGETALL'sellers-80183917'”,那么该应用程序的这一方工作正常,我最终得到正确的数据。无法接收来自套接字io的redis数据
问题出在js方面。我使用socketio和redis nodejs库来监听redis实例并通过d3js viz在线发布结果。
我运行下面的代码节点:
var express = require('express');
var app = express();
var redis = require('redis');
app.use(express.static(__dirname + '/public'));
var http = require('http').Server(app);
var io = require('socket.io')(http);
var sredis = require('socket.io-redis');
io.adapter(sredis({ host: 'localhost', port: 6379 }));
redisSubscriber = redis.createClient(6379, 'localhost', {});
redisSubscriber.on('message', function(channel, message) {
io.emit(channel, message);
});
app.get('/sellers/:seller_id', function(req, res){
var seller_id = req.params.seller_id;
redisSubscriber.subscribe('sellers-'.concat(seller_id));
res.render('seller.ejs', { seller:seller_id });
});
http.listen(3000, '127.0.0.1', function(){
console.log('listening on *:3000');
});
这是正在接受用户请求和输出即在seller.ejs文件的相关部分:
var socket = io('http://localhost:3000');
var stats;
var seller_key = 'sellers-'.concat(<%= seller %>);
socket.on(seller_key, function(msg){
stats = [];
console.log('Im in');
var seller = $.parseJSON(msg);
var items = seller['items'];
for(item in items) {
var item_data = items[item];
stats.push({'title': item_data['title'], 'today_visits': item_data['today_visits'], 'sold_today': item_data['sold_today'], 'conversion_rate': item_data['conversion_rate']});
}
setupData(stats);
});
问题是因为socket_on()方法从来没有收到任何东西,我也没有看到问题出在哪里,因为除此之外,一切看起来都很好。