私はpythonとノードの間のpubsubメッセンジャーとしてredisを使用してリアルタイムビジュアライゼーションを構築しています。 hmsetを使ってredisハッシュを設定するpythonスクリプトが常に実行されています。私が次のコマンド例を入力すると、アプリケーションのその側がうまくいきます: "HGETALL 'sellers-80183917'"私は適切なデータを得ることになります。ソケットioからredisデータを受け取ることができません
問題はjs側にあります。私はsocketioとredis nodejsライブラリを使ってredisインスタンスを聞き、d3js経由でオンラインで結果を公開しています。
は私がノードで次のコードを実行します。
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()メソッドは何も受け取っていないし、問題がどこにあるのかわからないので、これ以外にはすべてが正常に動作しているようです。