Javascript Socket.io如何判断某人何时离开

Javascript Socket.io如何判断某人何时离开,javascript,jquery,html,sockets,socket.io,Javascript,Jquery,Html,Sockets,Socket.io,我正在用socket.io创建一个实时游戏。目前,当有人离开时,什么也没有发生。我想通知服务器说是谁走了。有没有一种方法可以在用户离开时发出正确的信息?我是否可以让服务器每隔1000毫秒ping一次Everyone或其他什么来告诉谁仍在连接?在关闭窗口/页面之前,在添加事件侦听器以收听该频道时发出包含用户详细信息的事件。事件侦听器可以从收到的消息中获取用户详细信息并显示它 草案: // server code socket.on('user_left', function(user){ /

我正在用socket.io创建一个实时游戏。目前,当有人离开时,什么也没有发生。我想通知服务器说是谁走了。有没有一种方法可以在用户离开时发出正确的信息?我是否可以让服务器每隔1000毫秒ping一次Everyone或其他什么来告诉谁仍在连接?

在关闭窗口/页面之前,在添加事件侦听器以收听该频道时发出包含用户详细信息的事件。事件侦听器可以从收到的消息中获取用户详细信息并显示它

草案:

// server code
socket.on('user_left', function(user){
   // broadcast user to channel 'user_left_group'
});

// browser - for other users
socket.on('user_left_group', function(user){
     // code to show user left
}

// browser - to say I am leaving
socket.emit('user_left', myname);
离开意味着什么

结案申请?关窗户?关闭系统?互联网消失了?我想一切都是一样的

您可以使用disconnect事件,一旦套接字断开连接(套接字,而不是用户,因为节点只知道套接字),您就必须找出谁是该套接字的“所有者”,并将他标记为“disconnected”

但我建议您必须等待几秒钟,因为即使在页面重新加载或导航到另一个页面时,断开连接事件也会触发

因此,根据解决方案,您可以创建一个每X秒运行一次的监视程序,并在用户不拥有任何套接字或长时间没有活动时将其标记为已断开连接

有关更多详细信息,请查看Socket.io文档:

套接字#断开连接(关闭:布尔值):套接字

断开此客户端的连接。如果close的值为true,则关闭基础>连接。否则,它只会断开名称空间的连接

事件

断开

断线时开火


首先,设置超时会使套接字对象失效。它们是实时的,因此一旦触发事件,进程就会启动。Socket.io有一个名为disconnect的事件,您可以侦听该事件并向当前连接的所有用户发出该事件。例如:

服务器

io.on('connection', function(socket) {
    const _id = socket.id
    socket.on('disconnect', function() {
        io.emit('userLeft', {message: _id + ' left the room'}
    })
})
客户

socket.on('userLeft', function(data) {
    document.querySelector('.notification').innerHTML = data
})

谢谢最后,我使用JQuery.unload()处理程序来执行您所说的操作。工作得很漂亮!谢谢你的回答!这也会起作用,但我最终使用JQuery.unload()处理程序在页面关闭时发出用户数据。非常感谢你回答我的问题!谢谢你解释它是如何工作的!我不知道如何使插座的断开部分工作。我最终使用JQuery.unload处理程序,然后将用户的数据发送到我创建的另一个套接字。我相信这会奏效,但我首先找到了另一个解决方案。感谢您的回复,我肯定会在我的下一个项目中使用这种技术!