Утечки памяти при использовании socket.io - PullRequest
7 голосов
/ 07 марта 2012

Я обнаружил, что сокеты не полностью уничтожаются на стороне сервера сокетов при их отключении вручную.Я нашел эту тему на github полезной.В то время как я ищу некоторые переменные ссылки, которые мешают GC чистить сокеты, я задаю вопрос здесь.

Если кто-то здесь столкнулся с той же проблемой, это очень помогло бы.

код, который не работает:

socket.on('disconnect', function(){
    socket.removeAllListeners();
});

///...................

socket.disconnect();

Обходной путь, который, однако, использует ограниченные поля библиотеки:

delete io.sockets[url];
io.j = [];

1 Ответ

1 голос
/ 10 мая 2012

на самом деле, это работает так, как задумано: когда вы отключаете сокет, вы просто заявляете, что не ожидаете получить больше данных от этого сокета прямо сейчас, чтобы фактически уничтожить сокет, вы в основном выполняете действие delete socket. Используйте это для события отключения, то есть:

socket.on('disconnect', function(){
    delete socket; 
})

вы также можете сделать это для объекта io.sockets.sockets внешней функции:

function deleteSocket(socketID){
    delete io.sockets.sockets[socketID];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...