我正在寻找一种方法来检查房间中的用户数量,以确保如果房间中已经有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');