С помощью веб-сокетов хочу поддерживать статус юзеров - онлайн. Когда юзер закрывает сайт, то он - оффлайн.
При авторизации или обновлении страницы выводится вот что в Консоли браузера:
Socket is closed. Reconnect will be attempted in 3 seconds. wss.js:40:9
open connection wss.js:12:9
Socket is closed. Reconnect will be attempted in 3 seconds. wss.js:40:9
reconnect wss.js:43:13
open connection
При этом изначально PHP срабатывает нормально, выставляя в MySQL соответствующее значение поля `online` = '1', но через мгновение сбрасывает на 0. С логикой кода всё в порядке. А вот что-то мешает правильно сработать всему механизму.
Что это может быть? В каком направлении копать? Как лучше сделать дебаг? Что вывести в консоль дополнительного?
Сам 
<script src="/assets/js/ws/wss.js"> лучше вставлять в meta, в самом начале body или в самом конце всего кода?
Прошу сильно не пинать, я в сокетах, жс - новичок
//var ghost = window.location.hostname;
const WS_URL = 'wss://mywebsite.com/wss2/';
var checker = null;
var socket = null;
const RECONNECT_TIME = 3000;
function connect() {
    socket = new WebSocket(WS_URL);
    socket.onopen = function () {
        console.info('open connection');
    };
    socket.onmessage = function (e) {
        var response = $.parseJSON(e.data);
        if (response.counters) {
            if (response.counters.notification == '0') {
                response.counters.notification = '';
            }
            if (response.counters.message == '0') {
                response.counters.message = '';
            }
            if (response.counters.err == 'true') {
                window.location = '/my/exit/';
                return false;
            }
            $("span#countNotifications").html(response.counters.notification);
            $("span#countMessages").html(response.counters.message);
        }
        setTimeout(function () {
            counters(userHash);
        }, 1500);
    };
    socket.onclose = function (e) {
        console.info('Socket is closed. Reconnect will be attempted in ' + RECONNECT_TIME / 1000 + ' seconds.', e.reason);
        setTimeout(function () {
            console.info('reconnect');
            connect();
        }, RECONNECT_TIME);
        clearTimeout(checker);
    };
    socket.onerror = function (err) {
        console.error('Socket encountered error: ', err.message ? err.message : 'undefined. ', 'Closing socket if open');
        if (socket.readyState !== socket.CLOSED) socket.close()
    };
}
connect();
function counters(userhash) {
    userHash = userhash;
    if (socket.readyState === socket.OPEN) {
        socket.send(JSON.stringify({function_ws: 'notificationCount', userToken: userhash}));
        //console.log('T: '+userhash);
    }else{
        setTimeout(function () {
            counters(userhash);
        }, 1000);
    }
}