2017-12-27 2 views
0

zähle ich die Anzahl der Online-WebSockets über OnConnection und OnDisconnect Ereignisse:socket.io: clientsCount und auf der Verbindung und trennen Ereignisse

const socketIo = require('socket.io'); 

var on_connect = 0; 
var on_disconnect = 0; 

var port = 6001; 
var io = socketIo(port, { 
    pingTimeout: 5000, 
    pingInterval: 10000 
}); 

//I have only one NameSpace and root NS is not used 
var ns1 = io.of('ns1'); 

ns1 
    .on('connection', function (socket) { 
     on_connect += 1; 

     socket.on('disconnect', function (reason) { 
      on_disconnect += 1; 
     }); 
    }); 

... 

var online = on_connect - on_disconnect; 

... 

Aber online Wert ungleich io.engine.clientsCount Wert.

Und im Laufe der Zeit wird der Unterschied zwischen online Wert und io.engine.clientsCount Wert wächst auf.

Warum ist das passiert?

Was ist erforderlich, um dies zu beheben?

+0

Welche Version von socket.io verwenden Sie? –

+0

"socket.io": "^ 2.0.1" – Meatbot

+0

Das Problem wurde bereits von @ gvmani behoben: https://Stackoverflow.com/a/47987040/3743683 –

Antwort

0

Die Variablen on_connect und on_disconnect sind Updates in den Callback-Ereignissen, während die Online-Variable nicht neu berechnet wird. Daher müssen Sie die Online-Variable jedes Mal neu berechnen, wenn sich die andere Variable ändert.

+0

Nein. Dies ist kein Produktionscode. Dies ist ein Beispiel für Code. – Meatbot

-1

Es kann einfacher sein, nur eine Variable zum Zählen von Verbindungen zu verwenden. Inkrementieren Sie es bei der Verbindung und dekrementieren Sie es bei der Trennung. So verfolge ich die Anzahl der Verbindungen. Dann ist es nicht notwendig, es jedes Mal zu berechnen, wenn sein Wert benötigt wird.

Auch die Zeile, die var online = on_connect - on_disconnect; vorkommt vor wird entweder geändert ... Das ist, was @ gvmani versucht, Ihnen zu sagen.

Hier ist ein Beispiel für einige von dem, was ich tue. Der folgende Code legt fest, dass Verbindungen & unterbrochen werden sollen, und verwaltet die Anzahl der aktuellen Verbindungen. Ich sollte beachten, dass ich keinen Namespace wie das OP verwende, aber das Zählen ist wichtig. Ich werde auch bemerken, dass ich connCount > 0 in der send() Funktion verwende. Welche in meiner Anwendung verwendet wird, um an alle verbundenen Clients zu senden.

/* ******************************************************************** */ 
// initialize the server 
const http = require('http'); 
const server = http.createServer(); 

// Socket.io listens to our server 
const io = require('socket.io').listen(server); 

// Count connections as they occur, decrement when a client disconnects. 
// If the counter is zero then we won't send anything over the socket. 
var connCount = 0; 

// A client has connected, 
io.on('connection', function(socket) { 

    // Increment the connection counter 
    connCount += 1; 

    // log the new connection for debugging purposes. 
    console.log(`on connect - ${socket.id} ${connCount}`); 

    // The client that initiated the connection has disconnected. 
    socket.on('disconnect', function() { 
     connCount -= 1; 
     console.log(`on disconnect - ${socket.id} ${connCount}`); 
    }); 
}); 

// Start listening... 
server.listen(3000); 

// Send something to all connected clients (a broadcast) the 
// 'channel' will indicate the destination within the client 
// and 'data' becomes the payload. 
function send(channel, data) { 
    console.log(`send() - channel = ${channel} payload = ${JSON.stringify(data)}`); 
    if(connCount > 0) io.emit(channel, {payload: data}); 
    else console.log('send() - no connections'); 
}; 
+0

Sie möchten Code-Snippet hinzufügen, um OP – Dhyey

+0

zu helfen Bitte sehen Sie sich diese Frage https://stackoverflow.com/questions/48375213/socket-io-how-to-calculate-ount-of-websockets-online-using- Callbacks-of-Conne – Meatbot

Verwandte Themen