2016-07-12 11 views
7

Mam prosty serwer socket.io używający socket.io-redis, socket.io-emitter, i uruchamiam redis (co jest dla mnie zupełnie nowe, jestem na windowsie, pobrałem redis i otworzyłem redis -server.exe i redis-cli.exe). Przez CLI redis za pomocą komendy monitor Widzę, że serwer jest podłączony i że zdarzenia dochodzą do redis od emitera, ale test-server.js nigdy nie rejestruje niczego. Co jeszcze muszę zrobić? Czy serwer socket.io musi subskrybować redis?nie odbieram zdarzeń z tym podstawowym setup.io + redis?

Redis wyjście "publish" "socket.io#/#" "\x93\xa7emitter\x83\xa4type\x02\xa4data\x92\xa4test\xa9some data\xa3nsp\xa1/\x82\xa5rooms\x90\xa5flags\x80"

test-server.js

var server = require('http').Server(); 
var io = require('socket.io')(server); 
var redis = require('socket.io-redis'); 

io.adapter(redis({ host: '127.0.0.1', port: 6379 })); 
io.on('connection', function(socket){ 
    console.log('client connected'); // Works 
    socket.emit('connect','test'); // Works 
}); 
io.on('test', function(socket){ 
    console.log('test came in'); // Works 
}); 
server.listen(3000); 

test-emit.js

var io = require('socket.io-emitter')({ 
    host:'localhost', 
    port:'6379' 
}); 
setInterval(function(){ 
    io.emit('test', 'some data'); 
    console.log('emitted'); 
}, 5000); 

Odpowiedz

2

odpowiedź brzmi, że socket.io-emitter nie było to, co potrzebne dla ten przypadek testowy. Łączy się bezpośrednio z redisem. W poniższym przykładzie używam zwykłego socket.io-client, a wszystkie zdarzenia trafiają poprawnie na serwer, a także z dwoma serwerami i dwoma klientami połączonymi z każdym innym serwerem, przy czym obydwaj klienci odbierają teraz to wydarzenie. Wspaniały!

testowe emit.js

var PORT = 3000; 
var HOST = 'http://localhost'; 
var port = parseInt(process.argv[2]) || PORT; 
var io = require('socket.io-client'); 
var socket = io.connect(HOST + ':' + port); 

socket.on('connect', function() { 
    console.log('connected, sending message'); 
    socket.emit('message', 'message from client'); 
    socket.on('message', function(data) { 
     console.log('new message received: '+data); 
    }); 
}); 

testowy server.js

var port = parseInt(process.argv[2]) || 3000; 
console.log('server listens on port ' + port); 
var io = require('socket.io').listen(port); 
var redis = require('socket.io-redis'); 
var adapter = redis({ host: '127.0.0.1', port: 6379 }); 
io.adapter(adapter); 
io.on('connection', function(socket){ 
    console.log('client connected'); 
    io.emit('message', 'client logged in on '+port+' and this message will be send to all clients'); 
    socket.on('message', function(d){ 
     console.log('message from socket:',d); 
    }); 
}); 

rozpoczęcia 4 różnych zacisków i prowadzone:

$ node test-server 3000 
$ node test-server 3001 
$ node test-emit 3000 
$ node test-emit 3001