2016-07-12 27 views
7

Ho un semplice server socket.io utilizzando socket.io-redis, un socket.io-emitter e eseguo redis (che è completamente nuovo per me, sono su windows, ho scaricato redis e open redis -server.exe e redis-cli.exe). Attraverso la CLI redis con il comando monitor Vedo che il server è connesso e che gli eventi raggiungono redis dall'emettitore, ma test-server.js non registra nulla. Cos'altro devo fare? Il server socket.io deve iscriversi ai redis?non si ricevono eventi con questo basic socket.io + redis setup?

Redis uscita "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); 

risposta

2

la risposta è che socket.io-emitter non era quello che mi serviva per questo test case. Si collega direttamente a redis. Nell'esempio seguente ora utilizzo il solito socket.io-client e tutti gli eventi arrivano correttamente nel server, e anche con due server e due client connessi ciascuno a un server diverso, con io.emit entrambi i client ora ricevono l'evento. Grande!

provini 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); 
    }); 
}); 

test-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); 
    }); 
}); 

inizio 4 terminali diversi ed eseguire:

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