Socket.io:用户在同一个房间中彼此不匹配

时间:2019-06-08 15:07:38

标签: javascript node.js socket.io chatroom

我有一个具有一些功能的简单聊天应用程序,其中之一是:查找其他合作伙伴。因此,此应用程序在正常使用时效果很好,例如只有2位用户的房间,并且当房间满时,确定房间名称的数字会递增。 (例如,房间名称为:“ 1”,当客户数量达到2时,房间号将修改为“ 2”)。但是如果用户多次单击“查找下一个合作伙伴”按钮,然后第二个用户连接,则事件认为他们在同一个房间中,因此无法彼此连接。为什么会这样?

这是代码:(服务器端)

 //chnm is io.of('/namespace')
 //numb equals to 1 at the beginnin
 socket.on('next', function(){
    socket.leave(socket.current_room)
    console.log("left room: ", socket.current_room);
    chnm.in(socket.current_room).emit('off'); 
    console.log(numb)
    //room = numb
    socket.join(numb);
    socket.current_room = numb
    console.log("Joined room: ", numb);
    chnm.in(numb).clients((err, clients)=>{
      if(clients.length < 2){         
        chnm.in(socket.current_room).emit('wait')
      }
      if(clients.length >= 2){
        ++numb
        chnm.in(socket.current_room).emit('stop waiting')
        console.log('partners found each other')
      }
    })
  })

和客户端事件(stop waitingwait

socket.on("wait", function () {
  document.getElementById("waiting").style.display = "inline";
  document.getElementById("message").disabled = true;
  document.getElementById("send").disabled = true;
});

socket.on("stop waiting", function () {
  document.getElementById("waiting").style.display = "none";
  document.getElementById("message").disabled = false;
  document.getElementById("send").disabled = false;
});

怎么了?我真的很需要这个学期的帮助,所以如果有帮助,我会很感激的。

编辑: 当在同一个房间中有两个用户彼此不匹配,并且第三个用户连接时,他连接到第二个用户,但是当第一个用户(单击FOP按钮的次数过多时,再次单击FOP按钮时,user2和user3彼此断开连接。我认为那是因为房间里有3个人。这是确定房间号是否应该增加的代码

chnm.on('connection', async function(socket){
  var room = numb;
  socket.join(room);
  socket.current_room = room;

   chnm.in(room).clients(function(err, clients) {
      if (clients.length < 2) {
         chnm.in(socket.current_room).emit('wait')
      }
      if (clients.length >= 2) {
          ++numb;
          chnm.in(socket.current_room).emit('stop waiting'); 
        }
    });
....

0 个答案:

没有答案