为什么只有一个连接时Socket.IO添加两个客户端?

时间:2019-07-09 07:02:17

标签: javascript html node.js express socket.io

在我的应用中,用户转到主屏幕,选择用户名,然后导航到另一个页面,从该页面可以转到输入房间的页面。

我有一些代码,每当用户加入一个房间时,变量clients就会递增。但是,无论何时有新用户加入,clients都会增加已连接用户的数量。这不是期望的行为。我的代码如下:

app.post('/race', function(req,res) {
  let race = io.of('/race').on('connection', (socket) => {
    console.log('A user has entered the race!');
    socket.on('joinRoom', function(roomName) {
      socket.room = roomName;
      console.log(socket.room);

      clients++;
      console.log(clients);
    });

    socket.on('disconnect', function() {
      clients--;
      console.log("A user has disconnected");
      console.log(clients);
    });
  });

  res.sendFile(path.join(__dirname, '/client/race/index.html'));
});

为了简洁起见,我从代码中删除了一些功能。但是将用户添加到clients的主要功能仍然存在。当只有一个用户正在连接和断开连接时,它可以正常工作,但是当另一位用户加入时,它添加2,使总数增加到3。当第三个用户加入时,它添加3,使总数增加到6。

socket.on('joinRoom函数一定存在一些问题-它似乎被称为连接用户的次数。请注意,console.log('A user has entered the race!');不会被调用两次。

为什么会出现此问题?

1 个答案:

答案 0 :(得分:0)

//Server
app.get('/race', function(req, res) {
  res.sendFile(path.join(__dirname, '/client/race/index.html'));
});  

const racesocket = io('http://localhost', {
  path: '/race'
});

racesocket.on('connection', (socket) => {
    console.log('A user has entered the race!');
    socket.on('joinRoom', function(roomName) {
      socket.room = roomName;
      console.log(socket.room);

      clients++;
      console.log(clients);
    });

    socket.on('disconnect', function() {
      clients--;
      console.log("A user has disconnected");
      console.log(clients);
    });
  });


//Client
<script src="/socket.io/socket.io.js"></script>
<script>
  const socket = io('http://localhost/race');
</script>

每当用户执行“ / race” POST api时,就会调用整个代码。不需要此操作,将其从那里删除,一旦客户端连接到套接字中的“ / race”,它将自动进入“ onconnection”回调。

因此,看起来您正在拥有连接事件回调的用户次数,而不是一个。