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');
};
Welche Version von socket.io verwenden Sie? –
"socket.io": "^ 2.0.1" – Meatbot
Das Problem wurde bereits von @ gvmani behoben: https://Stackoverflow.com/a/47987040/3743683 –