这个“if else”语句在我的socket.io/Node.js环境中不起作用

时间:2017-03-05 03:33:11

标签: node.js multithreading if-statement for-loop socket.io

所以我正在开发一款简单的游戏。逻辑流程是当2名玩家连接到房间时,游戏将初始化并发出3秒倒计时事件以及按钮。如果一个玩家点击该按钮,该玩家将发出一个事件,使他/她成为游戏的主持人。

按钮将显示3秒钟。如果它在没有被点击的情况下消失,服务器将随机选择主机。

是否点击按钮,3秒后所有客户端都会发出“就绪”事件。

这是我的代码。

如果单击该按钮,客户端将发出“host”事件,我的服务器端代码为

client.on('host',function(){

   var player = room.getPlayer(client.id);
   player.isHost=true;


 });

然后这是“就绪”事件的服务器端。

 client.on("ready", function() {
  var player = room.getPlayer(client.id);
  var table = room.getTable(player.tableID);
   if (2>1) {
      for (var i = 0; i < table.players.length; i++) { 

        if (table.players[i].isHost===true){

          console.log("you are the host")
        } else {
          console.log("we are going to randomly pick a host")
          }

       }
     }
 })

现在,如果没有玩家点击按钮,终端将显示

我们将随机选择主持人

我们将随机选择主持人

我们将随机选择主持人

我们将随机选择主持人

否则就像

我们将随机选择主持人

你是主持人

我们将随机选择主持人

你是主持人

在这个阶段只有2个客户端允许游戏,所以players.length是2.看起来if / else会和players.length一起执行吗?

2 个答案:

答案 0 :(得分:0)

我认为首先要提到的是if (2>1) { ...完全没必要。代码将直接进入for循环,就好像它不存在一样。

你的代码除了if语句之外,老实说还可以。没有什么可以尖叫'我会导致更多的循环然后必要'。此时我建议在项目中发布与以下相关的任何内容:

  1. 多线程
  2. 插座处理/连接插座
  3. 我相信更多信息应该到期。

答案 1 :(得分:0)

感谢您的帮助。是的,for循环不是必需的,它是问题的原因。我的解决方案是将它从if-else语句中分离出来。

for (var i = 0; i < table.players.length; i++) { 
}
//test if Host exit in the table
 if (table.ifHost===true){

      console.log("you are the host")
    } else {
      var randomNumber = Math.floor(Math.random() * table.playerLimit);

       var Host=table.players[randomNumber]
      }

我发现有关socket io的有趣的事情是当两个套接字触发此事件时,如果Host没有退出,第一个将执行else(noHost)然后创建一个Host。第二个套接字将执行if条件,因为主机是由前一个套接字创建的....