我需要將實時添加到我的應用程序(Ruby On Rails),所以我認爲更好的方法是使用node.js + socket .io + redis。node.js + socket.io + redis + rails - 實時應用程序
我有這樣的application.js文件在後端(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在前端
var socket = io.connect('http://localhost:5001/socket.io');
socket.on('rt-change', function (data) {
console.log(data);
});
我啓動與節點應用的application.js .js命令,它的工作原理!
的MacBook-PRO-Zhirayr:RT zhirayr $節點的application.js信息 - socket.io開始
但是當我試圖用Redis的發送消息($ redis.publish「RT -change',{hello:'world'}),我的瀏覽器不會在控制檯中記錄任何東西。 我確定,從瀏覽器建立的連接導致當我停止節點時,它會拋出連接拒絕錯誤。我確信redis和節點之間的連接已經建立,導致application.js中的console.log(消息)記錄它。 但瀏覽器中的console.log不會記錄任何內容。
任何想法爲什麼?
謝謝。
UPD爲#Antoine
新增的console.log中的application.js io.on( '連接',函數(插座){ redis.on( '信息',函數(信道,消息){ ('來自redis的新消息'); socket.emit('rt-change',message); });; }); }
當r.publish 'RT-變化',{:你好=> '世界'}成爲執行時,節點記錄此:
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
奇怪,節點記錄11次爲1個消息。
您從哪裏發送此消息'$ redis.publish 'RT-變化',{你好: '世界' ''? – udidu
從Rails應用程序。 –
你可以在redis訂閱回調中加入一個日誌來確保它被觸發嗎? – Antoine