Онлайн-список пользователей Socket.io не работает должным образом в производстве - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь реализовать страницу онлайн-пользователей с помощью Socket.io на веб-сервере exprses.Код, который я использую, указан ниже.Когда я использую сайт в локальной сети, он работает нормально.Но в производстве Socket.io ведет себя необъяснимым образом

app.js

...

const app = express()

const http = require('http').createServer(app)

const io = require('socket.io')(http)

let activeUsers = []

...

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)
  })

})

...

На каждой другой странице я реализовал следующий клиентский код JavaScript

<script>
  var socket = io();
  socket.emit('user viewing', '<%= user.username %>');
</script>

activeUsers.ejs

<script src="/socket.io/socket.io.js"></script>
        <script>
          var socket = io();
          socket.on('active users', function(activeUsers){

            document.getElementById('users').innerHTML = '';

            for(var x = 0; x < activeUsers.length; x++) {
              if(activeUsers[x].last_activity != 'NULL') {
                  $('#users').append('<tr><td>' + activeUsers[x].username + '</td><td>' + activeUsers[x].last_activity + '</td></tr>');
              }
            }
          });
        </script>

Когда я нахожусь на localhost, сайт правильно отображает всех активных пользователей.Но когда я использую сайт в производстве.Сайт показывает только несколько пользователей, которые в сети, хотя другие тоже онлайн.Иногда это даже не показывает учетную запись, которая просматривает страницу.Я использую PM2 для производства.В чем может быть проблема для этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...