我正在嘗試創建/加入一個房間,每個房間限制為 2 個用戶,一切正常,但是當 2 個用戶并發請求創建/加入一個房間時,所有 3 個用戶都被添加到同一個房間。我試過使用
- 簡單的mongodb插入/更新
- 使用事務
- 現在存盤在記憶體
中的是代碼
const rooms = {};
module.exports = function ({ io, socket }) {
socket.on("/createJoinPublicRequest", async ({ user }) => {
let title = `${user._id}.${Date.now()}`;
let foundRoom = Object.keys(rooms).find((room) => {
return rooms[room].roomLimit > rooms[room].users.length;
});
if (!foundRoom) {
//create a room if not found
rooms[title] = {
title,
users: [
{
_id: user._id,
},
],
roomLimit: 2,
roomType: "public",
status: "open",
};
socket.join(title);
} else {
// join existing room
room = rooms[foundRoom];
room.users.push({ _id: user._id });
if (room.users.length == room.roomLimit) {
room.status = "full";
if (await storeToMongoDB(room)) {
delete rooms[foundRoom];
}
}
socket.join(room.title);
}
await User.findByIdAndUpdate(user, {
joinedRoom: title,
});
return;
});
uj5u.com熱心網友回復:
您應該使用互斥鎖來防止向 Room 添加更多用戶。
對于單實體:https ://www.npmjs.com/package/async-mutex
對于多實體:Redis 互斥鎖
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/493326.html
上一篇:靜音系統discord.js
