Поддерживайте Socket.io в активном состоянии, пока вкладка неактивна - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь реализовать код, который показывает список онлайн-пользователей на сайте и время их последней активности. Но проблема, с которой я сталкиваюсь, заключается в том, что, когда вкладка неактивна или пользователь не выполняет никаких действий с вкладкой, сокет автоматически отключается. Как сохранить работоспособность сокета, если вкладка открыта независимо от того, активна она или нет.

app.js

...
io.on('connection', function(socket){

  let userName

  socket.on('user viewing', function(user){
    let inActiveUsers = false

    for(var x = 0; x < activeUsers.length; x++) {
        if(activeUsers[x].username == user) {
            inActiveUsers = true
            activeUsers[x].last_activity = MDate.getDateTime()
            break
        }
    }

    if(!inActiveUsers) {
        activeUsers.push({"username": user, "last_activity": MDate.getDateTime()})
    }

    userName = user

    io.emit('active users', activeUsers)

  })

  socket.on('disconnect', function(){

    let userIndex = -1

    for(var x = 0; x < activeUsers.length; x++) {
        if(activeUsers[x].username == userName) {
            userIndex = x
            break
        }
    }

    if(userIndex != -1) {
      activeUsers[x].last_activity = 'NULL'
    }

    io.emit('active users', activeUsers)
  })

})
...

Код клиента

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io();
  socket.emit('user viewing', '<%= user.username %>');
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...