皆さん、 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アダプタモジュールを完全に間違って使用していることはわかっています.