WebSocket房间加入后怎么确保用户不重复创建?

Newb.仙仙 阅读 3

我在用 WebSocket 做一个多人协作的白板应用,现在卡在房间管理这块了。每次用户输入房间号进房间,我担心会不小心重复创建同一个房间,导致状态混乱。

我试过在服务端用 Map 存房间,但客户端如果快速点两次“加入”,就会发两个 join 请求,结果房间被初始化两次。有没有什么靠谱的方式能保证房间只创建一次?

const rooms = new Map();

function joinRoom(roomId) {
  if (!rooms.has(roomId)) {
    rooms.set(roomId, { users: [], canvasData: {} });
  }
  // 这里可能被并发调用,导致重复初始化?
}
我来解答 赞 4 收藏
二维码
手机扫码查看
1 条解答
W″兴慧
加锁就完事。用 async 函数和 Promise 实现简单互斥。

let lock = {};
function joinRoom(roomId) {
if (!lock[roomId]) {
lock[roomId] = new Promise(resolve => {
if (!rooms.has(roomId)) {
rooms.set(roomId, { users: [], canvasData: {} });
}
resolve();
delete lock[roomId];
});
}
return lock[roomId];
}


就这样。
点赞
2026-03-31 05:01