node.js + socket.io + redis + szyny - aplikacja RealTime
Muszę dodać do mojej aplikacji w czasie rzeczywistym (Ruby On Rails), więc myślę, że lepszym sposobem jest użycie node.js + socket.io + redis.
Mam ten plik application.js w backend (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);
I messages.js w interfejsie
var socket = io.connect('http://localhost:5001/socket.io');
socket.on('rt-change', function (data) {
console.log(data);
});
Uruchomię application.js za pomocąwęzeł application.js polecenie i to działa!
MacBook-Pro-Zhirayr: rt zhirayr $ node application.js info - socket.io start
Ale gdy próbuję wysłać wiadomość za pomocą redis ($ redis.publish 'rt-change', {hello: 'world'}) z aplikacji Rails, moja przeglądarka nie rejestruje niczego w konsoli. Jestem pewien, że połączenie z przeglądarki zostało ustanowione, ponieważ po zatrzymaniu węzła zgłasza błąd odrzucenia połączenia. I jestem pewien, że połączenie między redis a węzłem zostało ustanowione, ponieważ plik console.log (komunikat) w application.js rejestruje go. Ale console.log w przeglądarce nie rejestruje niczego.
Jakieś pomysły dlaczego?
Dzięki.
UPD dla #Antoine
Dodano console.log w application.js io.on ('connection', function (socket) {redis.on ('message', function (channel, message) {console.log ('nowa wiadomość od redis'); gniazdo. emit ('rt-change', message);});});
Gdy r.publish 'rt-change', {: hello => 'world'} zostanie wykonane, węzeł rejestruje to:
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
To dziwne, węzeł loguje się 11 razy za 1 wiadomość.