皆さん、私は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と同じポートを使用してサーバに接続されている場合にのみメッセージを受信できます。
誰でも助けてくれれば幸いです。アダプタモジュールが完全に間違っている。
私にとってはうまくいかないようです。万が一あなたのために働くsocket.emitまたはsocket.broadcastコードを投稿できますか?また、私は、これらのポート番号は自動的に作成されるpub/subチャネルのポートであると考えていますが、私のredisサーバは6379で動作しています。 –