Как считать онлайн на сайте?
socket.io уже давно не актуален и не дает ничего кроме оверхеда.
Используйте чистый https://www.npmjs.com/package/ws
получить число всех активных соединений wss.clients.length
https://www.npmjs.com/package/ws#server-broadcast
Чтобы отсеять дубли нескольких открытых вкладок браузера используйте сессионные куки с рандомным идентификатором ( куки можно извлечь из request в этом примере https://www.npmjs.com/package/ws#client-authentication ). 
Как получите идентификатор присвойте его клиенту ws.awesomeRandomId = <идентификатор>. 
awesomeRandomId - произвольное имя, какое вам удобно. 
Далее в https://www.npmjs.com/package/ws#server-broadcast у каждого client появится awesomeRandomId, по которому можно отсеять дубли.
let online = 0,
ipsConnected = {}; //список подключенных ip

io.on('connection', async (socket) => {
    let address;

    if (socket.handshake.headers['x-forwarded-for'] !== undefined) {
      address = socket.handshake.headers['x-forwarded-for'];
    } else {
      address = socket.handshake.headers["x-real-ip"];
    }

    if (!ipsConnected.hasOwnProperty(address)) {
        ipsConnected[address] = 1;
        online++;
    } else {
        ipsConnected[address] += 1;
    }

    socket.on('disconnect', () => {
        ipsConnected[address] -= 1;

        if (ipsConnected[address] <= 0) {
            delete ipsConnected[address];
            online--;
        }
  });
});