簡體   English   中英

Socket.io-無法獲得會議室中的客戶端數量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM