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