Nodejs socket.io – 如何获取所有套接字并比较它们的属性?

我需要获得所有客户的数据,并比较某些属性来确定谁赢了比赛

代码举个例子:

socket.on('joinedRoom', function(roomData){ socket.join(roomData.roomname); socket.score = 0; }): 

在这里我增加玩家的分数:

 socket.on('sendPlayerScore', function(username){ socket.score++; }); 

所以这个想法是,我会从这个特定的房间得到所有的分数,以确定谁得分更多。

有没有什么好方法可以做到这一点?

谢谢!

你可以看到所有的房间,以及代码如下:

 let rooms = io.sockets.adapter.rooms; for (let room of Object.keys(rooms)) { console.log("room"); console.log(" ", rooms[room]); } 

io.sockets.adapter.rooms[room]将包含一个对象,它具有所有在这个房间中的套接字标识,如下所示:

 { sockets: { 'm3wgTTKn-beT9TdyAAAB': true, 'mr-p1uL_jjeLzd0UAAAA': true }, length: 2 } 

而且,给定一个socket.id,你可以得到实际的套接字对象:

 io.sockets.connected[id] 

把它放在一起,你可以枚举给定的房间中的所有sockets,如下所示:

 function getListOfSocketsInRoom(room) { let sockets = []; try { let socketObj = io.sockets.adapter.rooms[room].sockets; for (let id of Object.keys(socketObj)) { sockets.push(io.sockets.connected[id]); } } catch(e) { console.log(`Attempted to access non-existent room: ${room}`); } return sockets; } 

此时,你在房间里有一系列的套接字,这样你就可以通过这个数组来搜集你要找的任何信息(例如分数)。