Необходимо сделать счетчик онлайна на сайте
node.js
socket.io
Из наработок
let online = 0,
ipsConnected = []; //список подключенных ip
io.on('connection', async (socket) => {
if(socket.handshake.headers['x-forwarded-for'] !== undefined){
var address = socket.handshake.headers['x-forwarded-for'];
}else{
var address = socket.handshake.headers["x-real-ip"];
}
if(!ipsConnected.hasOwnProperty(address)) {
ipsConnected[address] = 1;
online++;
}
socket.on('disconnect', () => {
delete ipsConnected[address];
online--;
});
});
Но такой подход не совсем рабочий. Если открыть сайт, скажем, на телефоне и на пк, то онлайн будет равен 1. Так и должно быть, ведь для всех подключений с одного ip считаем онлайн за 1. Но, если на одном из устройств закрыть сайт, онлайн будет равен 0, несмотря на то, что человек всё ещё на сайте.
Как лучше реализовать счетчик онлайна? Или есть готовые примеры кода на node и socket.io дабы не изобретать велосипед?