Tôi cần thêm thời gian thực để ứng dụng của tôi (Ruby On Rails), vì vậy, tôi nghĩ rằng cách tốt hơn để làm điều đó là sử dụng Node.js + ổ cắm .io + redis.Node.js + socket.io + redis + ray - ứng dụng RealTime
Tôi có điều này application.js tập tin trong một 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);
Và messages.js trong frontend
var socket = io.connect('http://localhost:5001/socket.io');
socket.on('rt-change', function (data) {
console.log(data);
});
Tôi đang tung ra application.js với ứng dụng nút .js lệnh và nó hoạt động!
MacBook-Pro-Zhirayr: rt zhirayr $ node application.js thông tin - socket.io bắt đầu
Nhưng khi tôi đang cố gắng để gửi tin nhắn với redis ($ rt redis.publish' -Thay đổi', {hello: 'thế giới'}) từ ứng dụng Rails, trình duyệt của tôi không đăng bất cứ điều gì trong giao diện điều khiển. Tôi chắc chắn rằng kết nối từ trình duyệt thành lập, nguyên nhân khi tôi dừng nút, nó ném kết nối từ chối lỗi. Và tôi chắc chắn rằng kết nối giữa redis và nút thiết lập, nguyên nhân console.log (message) trong application.js bản ghi nó. Nhưng console.log trong trình duyệt không đăng bất cứ điều gì.
Mọi ý tưởng tại sao?
Cảm ơn.
UPD cho #Antoine
Added console.log trong application.js io.on ('kết nối', function (socket) { redis.on ('thông báo', function (kênh, message) { console.log ('tin nhắn mới từ redis'); socket.emit ('rt-thay đổi', tin nhắn); }); });
Khi r.publish 'rt-thay đổi', {: hello => 'thế giới'} trở thành thực hiện, các bản ghi nút này:
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
Thật kỳ lạ, nút đăng nhập 11 lần cho 1 bài viết.
Từ nơi nào bạn gửi tin nhắn này '$ redis.publish 'rt-thay đổi', {hello: 'thế giới' } '? – udidu
Từ ứng dụng Rails. –
Bạn có thể đăng nhập vào redis đăng ký gọi lại để đảm bảo rằng nó được kích hoạt? – Antoine