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();