Que estas usando para conectarte?
Es con raw socket oh algun Api como socket.io , si es con socket.io la respuesta anterior es correcta pues socket.io detecta si el socket se desconecto por medio
timeout creo que por defecto es 25 segundos, manda un evento al client si el cliente responde lo mantiene vivo, ahora también el socket.io cliente detecta el onunload event del browser desconectando al cliente..
Si no estas usando socket.io , y es puro raw socket podrias usar tambien el onunload evento pero no todos los browsers lo soportan sin embargo si estas usando raw socket ya estas usando un browser lo suficientemente al dia.. y el onunload deberia de ayudarte.
ejemplo
Código PHP:
var socket = new WebSocket('ws://game.example.com:12010/updates');
socket.onopen = function () {
console.log('connectedados');
};
// mandas que se esta desconectando
window.onunload=function(){
socket.send('disconnecting' , { whom : id});
}
Ese es un ejemplo claro, pero la idea va por ayi.