嘿伙计们,我正在尝试按照socket.io-redis文档实现 socket.io-redis 模块。将消息从一个客户端广播到同一服务器上的另一个客户端时,它工作正常。但是当我运行两台相同的服务器时,一台在 80 端口,一台在 81 端口,并尝试在客户端 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 消息应该能够在不同地址的服务器之间传递。
但是,当在不同端口上使用两个相同的服务器时,客户端 A 不会收到来自客户端 B 的消息。客户端 A 只有在连接到与客户端 B 相同端口的服务器时才能接收消息。
如果有人可以提供帮助,将不胜感激,并且据我所知,我使用的 socket.io-redis 适配器模块完全错误。