2016-07-12 78 views
7

socket.io-redis, socket.io-emitter kullanarak basit bir socket.io sunucum var ve redis'i çalıştırıyorum (bu benim için tamamen yeni, pencerelerdeyim, redis indirdim ve redis açtım -server.exe ve redis-cli.exe). komutuyla redis CLI aracılığıyla sunucunun bağlandığını ve olayların yayıcıdan yeniden uzandığını görüyorum, ancak test-server.js hiçbir zaman hiçbir şeyi günlüğe kaydetmiyor. Başka ne yapmam gerekiyor? Socket.io sunucusunun redilere abone olması gerekiyor mu?bu temel socket.io + redis ayarıyla etkinlik almıyor musunuz?

Redis çıkış "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); 

cevap

2

cevap socket.io-emitter ı için gerekli değildi olduğunu Bu test vakası. Doğrudan redis'e bağlanır. Aşağıdaki örnekte, şimdi her zamanki gibi socket.io-client'u kullanıyorum ve tüm olaylar sunucuya düzgün bir şekilde ulaşıyor ve iki sunucu ve her biri farklı bir sunucuya bağlanan iki istemciyle io.emit her iki istemci de şimdi olayı alıyor. Harika!

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

başlangıç ​​4 farklı terminalleri ve çalıştırın:

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