【问题标题】:How does the disconnect event works in socket.io?socket.io 中的断开连接事件是如何工作的?
【发布时间】:2022-01-12 00:44:36
【问题描述】:

我按照教程学习并能够复制/构建一个简单的实时网络应用程序。我从代码中理解了一切,除了一件事。 “断开连接”事件。为了简化,我删除了大部分代码,但它是这样的:

//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`)}
)

令我惊讶的是,这段代码有效,当用户关闭窗口或离开页面时,它会附加用户留下的消息,但它如何知道用户离开了?据我所知,“断开”这个词只是一个没有其他语义含义的字符串,对吧?我的意思是,它不像 addEventListener('click') 函数,其中 'click' 是一个内置事件,它意味着什么。据我了解,socket.io 中的事件是程序员为帮助服务器/客户端通信而“编造”的词,对吧?因此,我不明白离开页面如何在这里触发“断开连接”事件。有没有大神赐教一下?

【问题讨论】:

    标签: javascript node.js socket.io chat disconnect


    【解决方案1】:

    disconnect 事件是一个内置的 socket.io 事件,它会告诉您客户端何时断开连接。

    socket.io 客户端 JavaScript 使用窗口上的 beforeunload 事件侦听器,该侦听器在选项卡关闭之前执行,然后向服务器发送“我要死了”消息,然后消失。

    服务器也可以尝试 ping 客户端,如果没有返回,哎呀,断开连接。

    另一方面,客户端可以手动断开与服务器的连接:

    socket.disconnect();
    

    这会向服务器发送断开连接消息,然后断开连接。您可以重新连接:

    socket.connect();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-01
      • 2014-01-02
      • 1970-01-01
      • 2011-11-03
      • 2019-05-01
      • 2021-01-28
      • 2019-08-04
      • 2014-01-08
      相关资源
      最近更新 更多