Potrzebuję dodać w czasie rzeczywistym do mojej aplikacji (Ruby On Rails), więc myślę, że lepszym sposobem na to jest użycie node.js + socket .io + redis.node.js + socket.io + redis + rails - Aplikacja RealTime
mam to application.js plik 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);
Oraz messages.js w frontend
var socket = io.connect('http://localhost:5001/socket.io');
socket.on('rt-change', function (data) {
console.log(data);
});
jestem uruchomienie application.js z aplikacji węzła .js polecenia i to działa!
MacBook-Pro-Zhirayr: rt zhirayr $ node application.js info - socket.io rozpoczęła
Ale gdy próbuję wysłać wiadomość z REDiS ($ rt redis.publish” -change ', {hello:' world '}) z aplikacji Rails, moja przeglądarka nie rejestruje niczego w konsoli. Jestem pewien, że to połączenie z przeglądarki zostało ustanowione, ponieważ po zatrzymaniu węzła powoduje odrzucenie błędu połączenia. I jestem pewien, że połączenie między redis a węzłem ustanowione, powoduje, że console.log (message) w application.js loguje go. Ale console.log w przeglądarce nie rejestruje niczego.
Jakieś pomysły, dlaczego?
Dzięki.
UPD do #Antoine
Dodano console.log w application.js io.on ('związek', funkcja (gniazdo) { redis.on ('informacja' funkcja (kanału wiadomości) { console.log ("nowa wiadomość od redis"); socket.emit ("rt-change", wiadomość); }); });
Kiedy r.publish 'rt-change', {: hello => 'świat'} stać wykonany, loguje tego węzła:
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 11 razy na 1 wiadomości.
skąd ty Wysyłając wiadomość '$ redis.publish 'rt-Change', {komentarzy: 'Świat' } '? – udidu
Z aplikacji Rails. –
Czy umieścisz dziennik w wywołaniu zwrotnym subskrypcji redis, aby upewnić się, że został uruchomiony? – Antoine