Я новичок в адаптере socketio-redis.Первоначально у меня был один процесс socketio, но теперь я пробовал кластер socketio.
Когда это был один процесс, я поддерживал карту подключенных сокетов, чтобы найти сокет по идентификатору пользователя.Когда пользователь A выходит в комнату, если пользователь B был подключен, но еще не был в комнате, розетка B была найдена и присоединилась к этой комнате.Затем розетка А излучается в комнату.
Мой вопрос: как это сделать с помощью socketio-redis?
Ниже приведен упрощенный план.Можно ли добавить userId в сокет при подключении в одном процессе socketio, а затем найти этот сокет по userId в другом процессе?
chatio.on('connect', socket => {
// add userId to socket obj
socket.userId = userId
. . .
socket.on("message", async (data, ack) => {
const userId = data.otherUserId
const roomId = data.roomId
const message = data.message
const clients = await io.of('/').adapter.clients()
// a message came in from user A
// if user B socket is found, B joins same room
const otherUserSocket = clients.find(socketId => {
const s = io.of('/').adapter.connected[socketId]
return (s.userId == userId)
})
if (otherUserSocket) {
otherUserSocket.join(roomId)
socket.to(roomId).emit("message", { message })
}
}
})
Кто-нибудь имеет опыт реализации чего-то подобного?