如何识别连接到套接字的两个用户,并将其join到一个房间? Socket.io

所以这里是情况,我需要为我们的数据库中存在的两个人创build一个空间。 问题是我不能根据他们的套接字来识别这些用户。

假设有两个随机用户user1和user2。 现在,用户1想要发起与用户2的聊天,所以当用户1发起并将两个用户join该房间时,我需要创build一个房间。 以下是套接字join房间的问题,并且socket.id随着来自同一主机的重新连接而改变。 所以,我不知道如何joinuser2到房间。

这是代码。

export default function(socketio) { let sockets = []; let people = {}; const findUserById = function findUserById(data) { for (let x in people) { if (people[x].userId === data) { return x; } } } /** * [createRoom Creates a room for two users] * @param {[type]} data1 [Mongoose objectId for user] * @param {[type]} data2 [Mongoose objectId for user] * @return {[type]} [A string of 6 characters that identifies with the room] */ const createRoom = function createRoom(data1, data2) { const user1 = data1.toString().slice(-3); const user2 = data2.toString().slice(-3); return user1 + user2; } socketio.on('connection', function(socket) { console.log(`Connection made from ${socket.id}`); sockets.push({ socket: socket, id: socket.id }); socketio.on('join', (data) => { people[socket.id] = { userId: data } }) socketio.on('initiate', (data) => { const receiverSocket = findUserById(data.receiver); if (receiverSocket) { let room = createRoom(people[socket.id].userId, receiverSocket.userId) let chat = new Chat({ room: room }); /* Now, we'll add the chats to the respective users. */ User.findById(people[socket.id].userId, (err, foundUser) => { foundUser.chats.push({ room: room, partner: receiverSocket.userId }) foundUser.save((err, success) => { if (!err || success) { User.findById(receiverSocket.userId, (err, secondUser) => { secondUser.chats.push({ room: room, partner: people[socket.id].userId }) secondUser.save() }) } }) }) let user1Socket = sockets.filter((el) => { return el.id === socket.id }) let user2Socket = sockets.filter((el) => { return el.id === receiverSocket }) user1Socket.socket.join(room); user2Socket.socket.join(room); socketio.sockets.in(room).emit('private room created', { room: room }); } }) socketio.on('job', (data) => { socketio.broadcast.emit('jobPosted', data); }) socketio.on('message', (data) => { Chat.findOne({room: data.room}) .then((data)=>{ data.chat.push({'content': data.message, 'userId': data.sender, 'date': new Date()}) data.save() .then((success)=>{ socketio.sockets.in(data.room).emit('messageReceived', data.message) }) }) }) }); } 

这里的逻辑是,每次build立连接时,我都会存储这个socket.id,然后把它拉出来创build一个房间。 但是,当socket.id更改时,这会失败。

谁能帮我这个?