Частично решил проблему. Такой скрипт закрывает websocket при чистом закрытии страницы и сервер сразу ловит событие.
window.onunload = function(){
ws.close();
};
Для случая когда соединение прерывается не по причине чистого закрытия браузера или страницы задержка 10-30 сек не так страшна.