如何在socket.io中检查房间中的用户数量



我正在寻找一种方法来检查房间中的用户数量,以确保如果房间中已经有2名玩家,我可以阻止该玩家加入。然而,我在网上找到的代码和示例已经过时了。目前,我使用的是socket.io 3.0.1。

io.on("connection", socket => {
socket.on("join", (room, username) => {
var users = io.sockets.clients(room)
if (typeof users === 'undefined') {
users = []
}
console.log(users.length);
if (users.length <= 1) {
socket.join(room);
io.in(room).emit("join", username);
socket.emit("lobbyJoined");
users = io.sockets.adapter.rooms[room]
console.log("users in " + room + ": " + users);
} else {
socket.emit("lobbyFull");
}
});
});

其他帖子中推荐的io.sockets.clients(room)抛出一个错误:TypeError: io.sockets.clients is not a function,而io.sockets.adapter.rooms[room]返回"未定义",即使有用户连接到该房间。

如有任何帮助,我们将不胜感激。

即使有用户连接到io.socket.adapter.rooms[room],也会在该房间中未定义,因为

rooms属性包含Socket当前所在的房间列表。它以前是一个对象,现在是一个ES6集。

//这是房间中所有客户端ID的ES6集合

试试这个

users = io.sockets.adapter.rooms.get('Room Name');

最新更新