2017-12-31 147 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() });