2017-12-31 101 views
0

Ich habe Online-Zähler in der Navigationsleiste, die mit online Ereignis verbunden ist. Es zeigt die Anzahl der Online-Benutzer richtig an, aber wenn ich mich in einem anderen Fenster verbinde, wird der Zähler nicht aktualisiert (noch wenn ich das Fenster schließe). Es zeigt auch die richtige Nummer nach der Aktualisierung.Client-Daten werden nicht aktualisiert von Socket.io

Server

let currentConnections = {}; 
let numberOfConnections =() => Object.keys(currentConnections).length; 

io.sockets.on('connection', (socket) => { 
    console.log('New user connected.'); 
    currentConnections[socket.id] = { socket: socket }; 
    socket.emit('online', { count: numberOfConnections() }); 

    socket.on('disconnect',() => { 
     console.log('User has disconnected.'); 
     delete currentConnections[socket.id]; 
     socket.emit('online', { count: numberOfConnections() }); 
    }); 
}); 

Kunde

var socket = io.connect('http://localhost:3000'); 

socket.on('online', function(data) { 
    $("#online").html(data.count); 
    console.log(data); 
}); 

Antwort

1

Sie müssen die aktualisierte Zählung für alle Verbindungen übertragen, nicht nur auf die neu angeschlossene oder nicht verbunden Verbindung.

socket.emit('online', { count: numberOfConnections() }); 

dazu: An beiden Orten haben Sie es sich dies ändern

// send new count to all connections 
io.emit('online', { count: numberOfConnections() }); 
Verwandte Themen