Javascript 在下列套接字连接后打印socket.room时,无法识别初始socket.join()
[我的问题是,当我离开handleNewGame()函数时,我的初始socket.join(创建游戏的用户)无法识别。此图像包含console.log。在每次调用socket.join后,我都会在用户首次创建游戏时进行初始socket.join调用,其余调用都是在用户使用代码加入游戏时进行的Javascript 在下列套接字连接后打印socket.room时,无法识别初始socket.join(),javascript,node.js,sockets,websocket,socket.io,Javascript,Node.js,Sockets,Websocket,Socket.io,[我的问题是,当我离开handleNewGame()函数时,我的初始socket.join(创建游戏的用户)无法识别。此图像包含console.log。在每次调用socket.join后,我都会在用户首次创建游戏时进行初始socket.join调用,其余调用都是在用户使用代码加入游戏时进行的 VERSION 2.3.0 Socket.io ] }))` })) 根据socket.io的版本,socket.join()可能是异步的,因此立即检查.rooms将不会
VERSION 2.3.0 Socket.io
]
}))`
})) 根据socket.io的版本,
socket.join()
可能是异步的,因此立即检查.rooms
将不会显示它,因为连接尚未完成。如果是这种情况,则在异步功能完成后,它最终会显示在文件室中,但不会更新文件室。请更仔细地查看图像。可能在您再次登录之前,您的其他套接字正在断开连接,因此在您查看时它们不在。有许多可能的解释socket.join()
对于世界其他地方来说都很好。今后,请不要将此类诊断信息放在图像中。将它以纯文本的形式复制到你的问题中,这样我们都可以更清楚地看到它,这样就可以对它进行搜索和索引,并使那些使用屏幕阅读器的人能够访问它,等等。。。此外,如果您记录roomName
,则有助于了解在控制台输出中要查找的内容。您还可以记录socket.rooms
并查看显示的内容。在查看日志输出时,我认为它显示了第一个条目的内容。因为它是一个映像,所以我无法复制它,但是第一个连接记录了我所期望的console.log(io.sockets.adapter.rooms)代码>。它显示了两个房间。其中一个房间的名称与socket.id相同。这是预期的,因为每个套接字都单独放置在一个房间中,其名称为socket.id
。它还显示了另一个房间,房间名为s4WpA
,我猜是let roomName=makeid(5)的输出代码>。
io.on('connection', socket => {
console.log("Connection")
socket.on('newGame', handleNewGame);
socket.on('joinGame', handleJoinGame);
async function handleNewGame() {
let roomName = makeid(5);
const game = await Game.create({roomID: roomName, Players: [socket.id]});
clientRooms[socket.id] = roomName;
socket.emit('gameCode', game.roomID);
state[roomName] = game.GameState;
socket.join(roomName);
console.log(`Socket ID: ${socket.id}`);
console.log(io.sockets.adapter.rooms);
}
function handleJoinGame(roomName) {
clientRooms[socket.id] = roomName;
socket.join(roomName);
console.log(`Socket ID: ${socket.id}`);
console.log(io.sockets.adapter.rooms);
}