【问题标题】:Wrong player count in a room socket.io房间socket.io中的玩家人数错误
【发布时间】:2020-05-19 20:05:37
【问题描述】:

我有一个大厅系统,用户可以通过 lobbbyId 加入房间。 这是我的客户端

const socket = io('/chat');
      socket.emit("player-join", {
      name: returnObj.name,
      lobbyId: returnObj.lobbyId
      })

这就是我在服务器端捕获玩家加入的方式。

socket.on('player-join', data => {
socket.join(data.lobbyId)
console.log(Object.keys(io.sockets.in(data.lobbyId).connected).length)
})

因此,当用户加入 id 为 ff05c541-45d5 的房间时,我的 console.log 打印 1。但是当另一个用户加入 id 为 18261413-4625 的房间时,我的 console.log 打印 2。我应该得到的输出也是 1,因为那个房间里只有 1 个用户。计数器显然工作错误。我应该怎么做才能修复某个房间内玩家的计数器。

编辑:当我console.log(data.lobbyId)时它是不同的,因此玩家连接到不同的房间。这是输出

ff05c541-45d5
1
18261413-4625
2
18261413-4625
3

【问题讨论】:

  • 您是否在服务器上记录了 lobbyId 以查看它是否是正确的 lobbyId?
  • 是的。我试过了,他们正在连接到不同的房间

标签: javascript node.js websocket socket.io


【解决方案1】:

要获取加入房间的客户列表,用户namespace.clients(callback)socket.io docs

socket.on('player-join', data => {
socket.join(data.lobbyId)
io.of('/chat').in(data.lobbyId).clients((err, data) => {
  console.log("=== clients in room: ", data.length); // data is an array of clients 
});
//console.log(Object.keys(io.sockets.in(data.lobbyId).connected).length)
})

【讨论】:

  • 显然我总是得到 0 作为输出
  • 我的套接字正在使用默认命名空间。使用 io.of('/chat')
猜你喜欢
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多