2017-07-22 11 views
0

皆さん、私はsocket.io-redisドキュメントに従ってsocket.io-redisモジュールを実装しようとしています。あるクライアントから同じサーバー上の別のクライアントにメッセージをブロードキャストするときはうまく動作します。しかし、2つの同一のサーバー(ポート80に1つ、ポート81に1つ)を実行し、クライアントA(ポート80に接続)とクライアントB(ポート81に接続)間でメッセージをブロードキャストしようとすると、メッセージは流れません。これは私のコードです:socket.io-redisモジュールがサーバ間で動作しない

const client = require('redis').createClient() 
const io = require('socket.io')(server) 
const redis = require('socket.io-redis') 
io.adapter(redis({ host: 'localhost', port: 6379 })) 

io.on('connection', function(socket) { 
     socket.on('initializeSocket', function(data) { 
       //Assign socket id to client id lookup value 
       var clientID = JSON.parse(data).clientID 

       client.set(clientID, socket.id) 
       console.log("%s client ID redis lookup set to:", clientID) 
       console.log(socket.id) 
     }) 

     socket.on('personalMessage-client', function(data) { 

       ... 

       client.get(facebookID, function(err, socketID) { 
        if(socketID) { 
        console.log('broadcasting to %s', socketID) 
        socket.broadcast.to(socketID).emit('personalMessage-server', message) 
        } 
       }) 
     }) 
}) 

ソケット接続が初期化されると、クライアントのユーザーIDは、Redisの中にそれのそれぞれのsocket.idにキーと値のペアとして設定され、使用して取得されています

client.get(facebookID, function(err, socketID) { 
        if(socketID) { 
        console.log('broadcasting to %s', socketID) 
        socket.broadcast.to(socketID).emit('personalMessage-server', message) 
        } 
       }) 

redis-cli monitorは、実際にメッセージが公開されていることを示しています。両方のwebsocketサーバーが同じredisサーバーに接続されている場合、異なるアドレスのサーバー間でwebsocketメッセージを渡すことができるはずです。

ただし、クライアントAは、異なるポートで2つの同一のサーバーを使用しているときに、クライアントBからのメッセージを受信しません。クライアントAは、クライアントBと同じポートを使用してサーバに接続されている場合にのみメッセージを受信できます。

誰でも助けてくれれば幸いです。アダプタモジュールが完全に間違っている。

答えて

0

subClientpubClientを試してみてください。うまく動作します。ポート番号が範囲62000+にいるような

var redisAdapter = require('socket.io-redis'); 
var redis = require('redis'); 
var pub = redis.createClient('6379', '127.0.0.1'); 
var sub = redis.createClient('6379', '127.0.0.1'); 
io.adapter(redisAdapter({ 
    key: 'adapterKey', 
    pubClient: pub, 
    subClient: sub, 
})); 

はまた、あなたが投稿のスクリーンショットを見て、そうです、これはあなたのRedisポート(s)はありますか? socket.io-redisモジュールの6379(デフォルトポート)を送信しています。

+0

私にとってはうまくいかないようです。万が一あなたのために働くsocket.emitまたはsocket.broadcastコードを投稿できますか?また、私は、これらのポート番号は自動的に作成されるpub/subチャネルのポートであると考えていますが、私のredisサーバは6379で動作しています。 –

関連する問題