我正在使用socket-io-redis运行VVV(Vagrant)。这似乎有效,消息正在发送给Redis。
我使用SUBSCRIBE socket.io#/#
进行测试,正在记录一堆消息以供测试。
这是我在终端中看到的响应示例 -
1) "message"
2) "socket.io#/#"
3) "\x93\xa7emitter\x83\xa4type\x02\xa4data\x92\xa4time\xb82016-04-03T22:17:21.478Z\xa3nsp\xa1/\x82\xa5rooms\x90\xa5flags\x80"
节点JS -
var redis = require('socket.io-redis');
var io = require('socket.io')(3000);
io.adapter(redis({ host: '192.168.50.4', port: 6379 }));
// Handle opened socket connections
io.on('connection', function(socket) {
console.log( 'Connection' );
});
var io = require('socket.io-emitter')({ host: '192.168.50.4', port: 6379 });
setInterval(function(){
io.emit('time', new Date);
}, 5000);
客户 -
( function( window, undefined ) {
'use strict';
var socket = io( '192.168.50.4:3000', {transports:['websocket']} );
socket.on( 'time', function() {
console.log( 'Received time' );
});
socket.on( 'connect', function() {
console.log( 'Connected' );
console.log( socket );
});
} )( this );
当我运行Node应用程序时,我看到消息Connection
,在浏览器的控制台中,我看到消息Connected
(然后是用于调试的套接字)。
我无法看到任何明显错误,客户端连接并且发射器似乎正在工作。但客户从未收到过任何信息。
我错过了什么吗?由于运行Vagrant,IP不是本地主机。
任何建议表示赞赏。谢谢!
修改:
快速更新,我可以在不使用socket.io-emitter
的情况下发出,但它不会通过Redis。当我使用发射器时,它会正确地通过Redis,如上所述。
好像我的客户端没有收到来自Redis的消息,即使端口是打开的。
这是我尝试的内容 -
socket.emit( 'new_post', 'Nope' );
var io = require('socket.io-emitter')({ host: '192.168.50.4', port: 6379 });
io.emit( 'new_post', 'Yep' );
在我的浏览器中,我看到Nope
,但没有别的。然后我monitor
Redis并看到以下内容 -
"publish" "socket.io#/#" "\x93\xa7emitter\x83\xa4type\x02\xa4data\x92\xa8new_post\xa3Yep\xa3nsp\xa1/\x82\xa5rooms\x90\xa5flags\x90"
我的服务器在使用Redis时也看不到消息,我用 -
进行测试socket.on( 'new_post', function( msg ){
socket.emit( 'new_post', msg );
});