Socket.io在线用户列表在生产中无法正常运行

时间:2019-04-11 12:12:59

标签: node.js express socket.io

我正在尝试在exprses Web服务器中使用Socket.io实现在线用户页面。下面列出了我正在使用的代码。当我在本地网络中使用网站时,它可以正常工作。但是在生产中,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进行生产。这可能是什么问题?

0 个答案:

没有答案