我正在使用socket.io创建一个实时游戏。目前,当有人离开时,没有任何事情发生。我想以某种方式通知服务器说谁离开了。有没有办法在用户离开时发出正确的东西?我可以让服务器每隔1000毫秒ping一个人,或者告诉谁还在连接吗?
答案 0 :(得分:1)
在关闭窗口/页面之前发出包含用户详细信息的事件,在添加事件侦听器以侦听该频道。事件监听器可以从收到的消息中获取用户详细信息。展示它。
吃水:
// 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);
答案 1 :(得分:1)
离开意味着什么?
关闭申请?关闭Windows?关闭系统?互联网走了吗?我想一切都是一样的
您可以使用disconnect事件,一旦套接字断开连接(套接字,而不是用户,导致Node只知道套接字),您将不得不找出该套接字的“所有者”并将其标记为“已断开连接” ”。
但我建议您必须等待几秒钟,因为即使在页面重新加载或导航到另一页面时,也会触发断开连接事件。
因此,根据解决方案,您可以创建一个每X秒运行一次的观察程序,并在用户没有任何套接字或长时间没有活动时将用户标记为已断开连接。
检查Socket.io文档以获取更多详细信息: https://github.com/socketio/socket.io
<强>插槽#断开(关闭:布尔型):插座强>
断开此客户端的连接。如果close的值为true,则关闭基础&gt;连接。否则,它只是断开命名空间。
<强>事件强>
断开
断开连接时被解雇。
答案 2 :(得分:1)
首先,设置超时会使套接字对象失效。它们是实时的,因此一旦触发事件,就会启动一个过程。 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
})