没有收到这个基本的socket.io + redis安装程序的事件?

我有一个简单的socket.io服务器,使用socket.io-redis,一个socket.io发射器,我运行redis(这对我来说是全新的,我在windows上,我下载了redis并打开了redis-server .exe和redis-cli.exe)。 通过使用命令monitor的redis CLI,我发现服务器已连接,事件从发射器到达redis,但test-server.js从不logging任何内容。 我还需要做什么? socket.io服务器是否需要订阅redis?

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

testingserver.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); 

testingemit.js

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

答案是socket.io-emitter并不是我testing用例所需要的。 它直接连接到redis。 在下面的示例中,我现在使用通常的socket.io-client并且所有事件都正确到达服务器,并且还有两台服务器和两台客户机分别连接到不同的服务器,而io.emit两台客户机现在都收到事件。 大!

testingemit.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); }); }); 

testingserver.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); }); }); 

启动4个不同的terminal并运行:

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