2012-03-29 4 views
9

Nodejs와 Socket.io를 사용하고 있습니다. 클라이언트가 연결되면 새 JavaScript 객체가 만들어집니다.연결을 끊을 때 객체 제거 socket.io

이 개체는 영원히 남을 수 있습니까? 클라이언트 연결이 끊어지면 삭제하거나 제거해야합니까? 객체를 제거 할 수 있습니까? 삭제가 작동하지 않는다는 것을 알고 있습니다 ...

감사합니다.이 질문은 일반적인 질문 일 뿐이며 어떤 제안이라도 도움이 될 것입니다.

감사합니다.

답변

17

정리를 수행하지 않으면 그렇습니다. 내가 글로벌하게 만들고 있다고 가정하기 때문에 그들은 계속 거기에 머물러있을 것입니다.

당신은를 정리 disconnect 이벤트 리스너에 결합하여 사용자가 연결을 끊해야합니다

var clients = {} 
sockets.on('connection', function(socket) { 
    clients[socket.id] = socket; 

    socket.on('disconnect', function() { 
    delete clients[socket.id]; 
    }); 
}); 
+1

위대해, 감사합니다! 나는 '클라이언트'가 다른 객체도 추적 할 수있는 동일한 방법을 사용할 수 있다고 가정합니다. 생성 된 '소켓'기능 이외의 다른 여러 객체가 있습니다. – dzm

+0

jup! 어떤 사람들은 "소켓"변수 안에 객체를 추가하면 자동으로 파괴됩니다. 'socket.data = "foo"'그런 다음 클라이언트는 그 소켓에 대한 id를 가지고 있습니다. –

+0

완벽한, 좋은 생각입니다. 다시 한 번 감사드립니다! – dzm

0

내가 허용 대답은 정말 문제를 해결하지 생각합니다. 당신이 할 :

io.on('connection', function(socket){ 
    socket.on('event', function(){ 
     console.log('event fired'); 
    }); 
    socket.on('disconnect', function(){ 
     console.log('user disconnected'); 
    }); 
}); 

소켓 이벤트 청취자가 io.on 내에서 생성되는()의 콜백. socket.io 내부적으로 io.on 내의 모든 eventlisenters를 제거() 콜백 않는 한

socket.on('disconnect', function(){ 
    delete socket.namespace.sockets[this.id]; 
    console.log('user disconnected'); 
}); 

: 분리 한 후, 이러한 이벤트 청취자가 정말 가정 은 같은 것을 할 ... 제거되지 않습니다. 이벤트 리스너 유지

+0

엄격 모드에서는 삭제가 허용되지 않습니다. 다른 방법으로이를 수행 할 수 있습니까? –

관련 문제