如何在跨多个客户端的服务器中维护一个数据结构?

时间:2019-04-27 18:44:57

标签: javascript node.js socket.io

我正在尝试使用node.js和Socket.io服务器端以及react-native客户端创建配对服务器 当我打开两个模拟器时,两个连接都很好,但是当我记录配对队列的内容时,它只包含每个各自的用户,而不是两个用户。例如,当第二个用户连接时,两个用户都应该出现在队列的已记录内容中,但不会出现。

Server.js:

io.on("connection", socket => {
  console.log("a user connected..." + "\n");
  const queue = new LobbyQueue();
  socket.on("addPlayer", username => {
    if (queue.hasUser(username)) {
      console.log("user already in queue...");
    } else {
      console.log("New user joined: " + username);
      queue.enqueue(username);
      socket.join("lobby");
      const players = queue.getAll();
      console.log("Players in queue: " + "\n" + players);
      io.sockets.in("lobby").emit("players", players);
    }
  });
)};

我希望当第二个用户连接并加入会议室时,两个用户都将在控制台中登录。但是,仅记录一个用户名(每个客户端的用户名)。似乎队列对象不是两个客户端都通用的。还有,与此主题相关的术语吗?

1 个答案:

答案 0 :(得分:0)

您的queue是在客户端上创建的,因此每个客户端都有各自独立的队列。听起来好像您想将队列保留在服务器上,所以也许是这样的事情(但根据需要添加安全检查)?

const queue = new LobbyQueue();
sockets.on('connection', (socket) => {
  socket.emit('connected', { users: queue.getAll() });
  socket.on('addUser', user => queue.enqueue(user));
  socket.on('getUsers', () => queue.getAll());
});