2017-12-31 168 views
0

私はonlineイベントで接続されているナビゲーションバーにオンラインカウンタを持っています。それはオンラインユーザーの数を正しく示していますが、別のウィンドウで接続すると、カウンタは更新されません(ウィンドウを閉じても表示されません)。リフレッシュ後も正しい番号が表示されます。クライアントデータはSocket.ioによって更新されません

サーバー

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() }); 
    }); 
}); 

クライアント

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

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

答えて

1

あなたはすべての接続にだけでなく、新たに接続または切断接続に更新されたカウントをブロードキャストする必要があります。両方の場所では、それは、これを変更している:

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

をこれに:

// send new count to all connections 
io.emit('online', { count: numberOfConnections() }); 
関連する問題