[英]Socket.io - Unable to get the number of clients in room
const app = require('express')();
const server = require('http').Server(app);
const io = require('socket.io')(server);
const port = 3000;
var numClients = {};
server.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
app.get('/', (req, res) => {
res.sendFile(__dirname + '/public/index.html');
});
app.get('/room1', (req, res) => {
res.sendFile(__dirname + '/public/room1.html');
});
app.get('/room2', (req, res) => {
res.sendFile(__dirname + '/public/room2.html');
});
app.get('/room3', (req, res) => {
res.sendFile(__dirname + '/public/room3.html');
});
// tech namespace
const tech = io.of('/tech');
tech.on('connection', (socket) => {
socket.on('join', (data) =>{
socket.join(data.room)
console.log(numClients[data.room]);
if (numClients[data.room] == undefined) {
numClients[data.room] = 1;
} else {
numClients[data.room]++;
}
console.log(numClients[data.room]);
//emittig message to people in room
tech.in(data.room).emit('message', `New user joined ${data.room} room!`)
})
socket.on('disconnect', (data) => {
console.log('user disconnected');
numClients[data.room]--;
tech.emit('message', 'user disconnected');
})
})
每當有人加入會議室時,numClients [data.room]編號都會增加1。但是,當有人離開會議室時,numClients [data.room]編號應該減少,但出於某些原因不會減少。 而是,該數字完全不變。 我該如何解決?
您只是缺少用戶離開的代碼。 因此,除非斷開連接(例如,關閉瀏覽器),否則用戶永遠不會離開房間 。
您應該像加入連接一樣處理這種情況:
socket.on('leave', (data) =>{
socket.leave(data.room, () => {
console.log(numClients[data.room]);
numClients[data.room]--;
console.log(numClients[data.room]);
//emittig message to people in room
tech.in(data.room).emit('message', `User left ${data.room} room!`)
});
});
現在,如果用戶離開后斷開連接,請確保您不再遞減numClients
!
為了安全起見,我建議numClients[data.room]
是加入的用戶列表,而不是數字。 因此,您可以使用Object.keys(numClients[data.room]).length
計數用戶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.