我正在尝试实现一个代码,该代码显示站点中在线用户的列表及其上次活动时间。但是我面临的一个问题是,当选项卡处于非活动状态或用户对选项卡不执行任何操作时,套接字会自动断开连接。如果选项卡处于打开状态(无论是否处于活动状态),如何保持套接字活动?
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>