私のアプリケーション(Ruby On Rails)にリアルタイムで追加する必要があるので、これを行うより良い方法はnode.js + socket .io + redis。node.js + socket.io + redis + rails - RealTimeアプリケーション
私は、これは私がノード・アプリケーションとのapplication.jsを起動してい
var socket = io.connect('http://localhost:5001/socket.io');
socket.on('rt-change', function (data) {
console.log(data);
});
(Node.jsの)
var app = require('http').createServer();
var io = require('socket.io');
var redis = require('redis').createClient();
var _ = require('underscore')._;
io = io.listen(app);
io.configure(function() {
io.set("transports", ["xhr-polling"]);
io.set("polling duration", 10);
io.set("close timeout", 10);
io.set("log level", 1);
})
redis.subscribe('rt-change');
io.on('connection', function(socket) {
redis.on('message', function(channel, message) {
socket.emit('rt-change', message)
});
});
var port = process.env.PORT || 5001;
app.listen(port);
そしてmessages.jsフロントエンドでのバックエンドでファイルをapplication.js持っています.jsコマンドを入力してください。
のMacBook - プロZhirayr:室温zhirayrの$ノードが情報をapplication.js - socket.ioは
を始めたしかし、私はRedisの($のredis.publish「RTでメッセージを送信しようとしているとき-change '、{hello:' world '})を実行すると、ブラウザはコンソールに何も記録しません。 ブラウザからの接続が確立されていることを確認します。ノードを停止すると、接続拒否エラーがスローされます。また、redisとノードの接続が確立されていると確信しています。これによって、application.jsのconsole.log(メッセージ)がログに記録されます。 ブラウザのconsole.logには何も記録されません。
なぜでしょうか?
ありがとうございました。 application.js io.on( '接続'、関数(ソケット){ redis.on( 'メッセージ'、機能(チャンネルメッセージ){で#Antoine
追加しましたにconsole.logため
UPD console.log( 'redisからの新しいメッセージ'); socket.emit( 'rt-change'、message); }); }); r.publish '変更を室温'
:実行なっ{ハロー=> '世界'}、ノードはこれを記録します。
new message from redis
new message from redis
new message from redis
new message from redis
new message from redis
new message from redis
new message from redis
new message from redis
new message from redis
new message from redis
new message from redis
それは1つのメッセージの奇妙、ノードログを11回です。
はどこからすると、このメッセージが ' '変更を室温'、{ハロー$ redis.publishを送信します} '? – udidu
Railsアプリから。 –
redis subscribeコールバックにログを記録して、トリガされていることを確認できますか? – Antoine