Я пытаюсь реализовать страницу онлайн-пользователей с помощью 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 для производства.В чем может быть проблема для этого?