在我的应用中,用户转到主屏幕,选择用户名,然后导航到另一个页面,从该页面可以转到输入房间的页面。
我有一些代码,每当用户加入一个房间时,变量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!');
不会被调用两次。
为什么会出现此问题?
答案 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”回调。
因此,看起来您正在拥有连接事件回调的用户次数,而不是一个。