Затем вы должны сохранить имя вашей комнаты в базе данных, и когда пользователь B войдет в систему или щелкнет по комнате, он / она присоединится к этому имени комнаты. Я предпочитаю использовать случайную сгенерированную строку для названия комнаты.
io.on('connection', (socket) => {
socket.on('join room', (data) => )
const userA = data.userB;
const userB = data.userA;
const roomname = data.roomName;
// I use mongodb
const socketRoomName = MyRoomModel.findOne({ roomname })
.then(response => response)
socket.join(socketRoomName)
// send message after user connected to rooms
socket.to(socketRoomName).emit('online', data.message)
})
Но если вы не хотите использовать комнаты и пространство имен в socket.io, вы можете обрабатывать вход в систему и отображать их при подключении
const sessionsMap = {};
io.on('connection', (socket) => {
// ask user id on client can be email, must unique
socket.emit('askForUserId');
socket.on('userIdReceived', (userId) => {
// map userid to sessions map
sessionsMap[userId] = socket.id;
});
socket.on('send', (message) => {
const receiverId = sessionsMap[message.receiverId];
const messageData = message.data;
// this will send only on user with that specific user id
socket.broadcast.to(receiverId).emit('my message', messageData);
});
});