【发布时间】:2017-02-05 14:06:40
【问题描述】:
我正在使用 redis 作为 python 和 node 之间的 pubsub messenger 构建一个实时可视化。总是运行一个 python 脚本,它使用 hmset 设置 redis 哈希。应用程序的那一侧工作正常,如果我在 redis 客户端中输入以下示例命令:“HGETALL 'sellers-80183917'”,我最终会获得正确的数据。
问题出在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 文件的相关部分,用于接收用户请求并输出 viz:
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() 方法从来没有收到任何东西,我看不出问题出在哪里,因为除此之外一切似乎都工作正常。
【问题讨论】: