没有收到这个基本的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