1

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

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 モニターは、メッセージが実際に発行されていることを示しています。両方の websocket サーバーが同じ redis サーバーに接続されている場合、websocket メッセージは異なるアドレスを持つサーバー間で受け渡されるはずであると理解しています。

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

誰かがそれを助けることができれば大歓迎です.socket.io-redisアダプタモジュールを完全に間違って使用していることはわかっています.

4

1 に答える 1