无法理解插座.io房间



我正试图在我的服务器上用sockets.io配置一个有多个房间的1v1游戏。当用户创建一个房间时,会生成一个5个字母的随机字母数字标识符,用户就会加入这个房间。

function handleNewGame() {
let roomName = makeid(5);
client.join(roomName);
}

然后另一个用户应该使用房间名称加入。房间名称取自html主页中的一个标记,然后由一个函数发送。这是在服务器端上处理游戏加入的功能

function handleJoinGame(roomName) {
const room = io.sockets.adapter.rooms[roomName];
}

所有这些都被包裹在中

io.on('connection', client => {
}

问题是,在这一点上,在其他用户尝试加入之前,房间是未定义的。

console.log(room);

这让我无法定义。如果我试着打印出所有的房间,它确实存在,但方法找不到。我做错了什么?

实际上,io.sockets.adapter.rooms返回一个Map。这么说,我必须用带着钥匙进入房间

const room = io.sockets.adapter.rooms.get(roomName);

我已经解决了这个问题。

暂时忘记库。从概念上讲,room只是一组用户。使用for循环向其广播的套接字连接的数组。它应该配有room manager,因为你想有很多房间,否则你就只能有一个房间。

让我们假设一个数组对象。

var roomManager = {
"room12345" : [socket1, socket2, socket5],
"room76432" : [socket3, socket4],
}

socket1想要广播时,你知道它的房间room12345,所以你向那个房间里的所有其他人广播。

所以实际上你可以很容易地自己实现这个逻辑。

最新更新