а в чём проблема, собсна?
на сервере -
socket.on('disconnect', function () {
...
и вуаля.
в нутре и функцэи использовать setTimeout чтобы не рвать коннекшны понапрасну - так, переходя со страницы на страницу, клиент последовательно посылает на сервер сообщения
disconnect и
connection с небольшой разницей во времени - ну, скажем, в районе двух секунд.
поэтому сервер должен ждать это время, чтобы различить - загружает клиент новую страницу или закрыл страницу совсем.
фактически, я хранил информацию о sessionID (и не только) всех клиентов, чтобы интерактивно выводить на каждой странице кто сейчас онлайн. подобное делать несокетами было бы ой как геморно и неправдоподобно
