在socket.io/套接字属性分配中确定第一个套接字连接

时间:2018-07-01 16:30:33

标签: javascript node.js socket.io

因此,我在node.js服务器上使用socket.io,并且尝试建立一种方法来确定哪个套接字客户端是第一个连接的客户端。然后,将向该客户端发送一条消息,告知该客户端在客户端进行游戏设置。由于我只希望将其发送给第一个客户端进行连接,因此我尝试检查状态对象上的'gameCaptain'属性是否为null。如果是这样,则必须没有连接,服务器应将当前套接字分配给state.gameCaptain属性。然后,当其他套接字连接时,if语句将不再传递,并且应跳过该发射。

const state = {
  gameCaptain: null,
  otherThing: null
}

io.on('connection', function(socket) {

  if (state.gameCaptain === null) {
    socket.emit('isGameCaptain', true);
    state.gameCaptain = socket.id;
  }
}

但是,这不起作用。虽然我可以在该if语句中分配状态对象的任何其他属性,例如:

 if (state.gameCaptain === null) {
    socket.emit('isGameCaptain', true);
    state.otherThing = socket.id;
  }

如果我尝试为state.gameCaptain属性分配任何内容,则整个方法将无法运行。我必须在这里缺少有关评估顺序的信息,但是好像if语句通过了null检查,然后分配了gameCaptain属性,然后又由于该分配而使null检查失败。我想不明白。

此外,如果我只是以错误的方式进行操作,并且您知道将套接字分配给变量的更好的方法,请告诉我。我只需要确定第一个连接并发出该套接字,这样就不会要求其他套接字来设置游戏。

0 个答案:

没有答案