socket.io 中的断开连接事件是如何工作的?
How does the disconnect event works in socket.io?
我按照教程学习并能够copy/build 一个简单的实时网络应用程序。除了一件事,我从代码中了解所有内容。 'disconnect' 事件。为了简化,我删除了大部分代码,但它是这样的:
//server.js
io.on('connection', (socket) => {
//...I removed code from here for simplification
socket.on('disconnect', () => {
socket.broadcast.emit('user-disconnected', users[socket.id]);
delete users[socket.id];
})
})
//client.js
//...a lot of code removed from here for simplification
socket.on('user-disconnected', myname =>
{appendMessage(`${myname} left`)}
)
令我惊讶的是,此代码有效,当用户关闭 window 或离开页面时,它会附加用户留下的消息,但它如何知道用户离开?据我所知, 'disconnect' 这个词只是一个字符串,没有其他语义,对吧?我的意思是,它不像 addEventListener('click') 函数,其中 'click' 是一个内置事件,这意味着一些事情。据我了解,socket.io中的事件是程序员为了server/client沟通而写的'made-up'字,对吧?因此,我不明白离开页面如何触发这里的 'disconnect' 事件。请哪位大侠指教一下好吗?
disconnect
事件是一个内置的 socket.io 事件,它会在客户端断开连接时通知您。
socket.io 客户端 JavaScript 使用 window 上的 beforeunload
事件侦听器,它在选项卡关闭之前执行,然后发送“我要死了” " 消息发送到服务器,然后消失。
服务器也可以尝试 ping 客户端,如果没有 returns,糟糕,断开连接。
另一方面,客户端可以手动断开与服务器的连接:
socket.disconnect();
这会向服务器发送一条断开连接消息,然后断开连接。您可以重新连接:
socket.connect();
我按照教程学习并能够copy/build 一个简单的实时网络应用程序。除了一件事,我从代码中了解所有内容。 'disconnect' 事件。为了简化,我删除了大部分代码,但它是这样的:
//server.js
io.on('connection', (socket) => {
//...I removed code from here for simplification
socket.on('disconnect', () => {
socket.broadcast.emit('user-disconnected', users[socket.id]);
delete users[socket.id];
})
})
//client.js
//...a lot of code removed from here for simplification
socket.on('user-disconnected', myname =>
{appendMessage(`${myname} left`)}
)
令我惊讶的是,此代码有效,当用户关闭 window 或离开页面时,它会附加用户留下的消息,但它如何知道用户离开?据我所知, 'disconnect' 这个词只是一个字符串,没有其他语义,对吧?我的意思是,它不像 addEventListener('click') 函数,其中 'click' 是一个内置事件,这意味着一些事情。据我了解,socket.io中的事件是程序员为了server/client沟通而写的'made-up'字,对吧?因此,我不明白离开页面如何触发这里的 'disconnect' 事件。请哪位大侠指教一下好吗?
disconnect
事件是一个内置的 socket.io 事件,它会在客户端断开连接时通知您。
socket.io 客户端 JavaScript 使用 window 上的 beforeunload
事件侦听器,它在选项卡关闭之前执行,然后发送“我要死了” " 消息发送到服务器,然后消失。
服务器也可以尝试 ping 客户端,如果没有 returns,糟糕,断开连接。
另一方面,客户端可以手动断开与服务器的连接:
socket.disconnect();
这会向服务器发送一条断开连接消息,然后断开连接。您可以重新连接:
socket.connect();