С помощью веб-сокетов хочу поддерживать статус юзеров - онлайн. Когда юзер закрывает сайт, то он - оффлайн.
При авторизации или обновлении страницы выводится вот что в Консоли браузера:
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);
}
}