反应js节点js socket.io循环

时间:2019-11-28 00:28:42

标签: node.js reactjs socket.io

请 有人可以告诉我如何解决这个问题

在我的客户端上使用react.js 我连接到插座并发送了一个播放器:

  componentDidMount() {
    // io() not io.connect()
    this.socket = io('http://localhost:9000');


    const player = 
      { id: 20, name: 'spt', mmr: 1000 }



    this.socket.emit('addPlayer-Queue', player);
    this.socket.on('match', (result) => {


    });

    this.socket.open();
  }

然后在我的后端,我尝试为他找到一个对手,条件是该玩家的MMR小于或等于5%:

  socket.on('addPlayer-Queue', (player) => {
    console.log(player);
      queue.addPlayer(player)
      const makeMatch =  queue.searching(player.id);  
      console.log(makeMatch);   
  socket.emit('match', makeMatch) 
  });

然后我进行搜索,如果我找到一个对手,我会将他放回我的插座 否则我返回null

  searching(id) {
    const firstPLayer = this.players.find(p => p.id == id)
    const { mmr } = firstPLayer
    const secondPlayer = this.players.find((playerTwo) => playerTwo.mmr < (5 / 100) * mmr + mmr && playerTwo.mmr > mmr - ((5 / 100) * mmr) && playerTwo.id != firstPLayer.id);
    if(!secondPlayer){
      return null;
    }
    const matchedPlayers = [
      firstPLayer,
      secondPlayer
    ]
    // remove matched players from this.players
    this.removePlayers(matchedPlayers);
    // return new Match with matched players
    return matchedPlayers;
  }
// remove matched players from this.players
this.removePlayers(matchedPlayers);
// return new Match with matched players
return matchedPlayers;}

我试图做一个循环逻辑来寻找一名球员,直到符合我的条件为止。

但是javascript不允许我这样做,因为我正在循环 我将无法将新玩家添加到队列中 然后将是一个永恒的循环

所以我想 有可能在前端提出解决方案吗?

那是我从活动中回来的比赛 为空

是否有可能再次调用后端并再次运行验证?

我不再知道该怎么办:(

编辑*:

我认为的另一种可能性(创建一个检查队列长度的事件,并且每当发生变化时,我都会尝试为玩家寻找对手)

请有人给我个灯

0 个答案:

没有答案