在浏览器中关闭 WebSocket 连接时是不是必须手动删除事件侦听器?

Posted

技术标签:

【中文标题】在浏览器中关闭 WebSocket 连接时是不是必须手动删除事件侦听器?【英文标题】:Do event listeners have to be removed manually when closing WebSocket connection in browser?在浏览器中关闭 WebSocket 连接时是否必须手动删除事件侦听器? 【发布时间】:2019-11-23 12:58:13 【问题描述】:

我正在使用WebSocket API 提供的本机方法。

我想知道是否需要删除事件侦听器,因为 link 和用于 websockets 的 MDN 示例 code 中都没有提到 removeEventListener 方法。

我正在使用这样的事件方法:

const ws = new WebSocket(url);
ws.onopen = () => 

此外,我想知道如果我用ws.close() 方法关闭连接,是否需要删除事件监听器,我想它会在清理时删除监听器。

【问题讨论】:

可能重复?虽然这是关于 node.js ***.com/questions/13430505/… @Nikki9696 这个问题是关于 Socket.IO 库的,而我在问的是 WebSocket API 本机方法。 我对 Django 频道进行了一些测试,发现无论有没有 .removeEventListener WS 连接正在关闭,我唯一需要关闭服务器的是 WS.close() 所以我不认为你应该手动做,虽然我不完全确定 【参考方案1】:

您必须手动删除事件侦听器。 事实上,添加的侦听器将在元素上保持活动状态,直到它们被销毁或在现代浏览器中手动删除。 您可以尝试测试是否在关闭 Web 套接字连接后触发事件。

【讨论】:

【参考方案2】:

"挖掘socket.io源码后,客户端断开连接时socket对象(即EventEmitter)被删除,无需手动调用removeAllListener"

从这里复制:do I have to remove event listener when socket is disconnected?

【讨论】:

问题是关于 WebSocket API,而不是 socket.io,据我测试,它们在连接关闭时会被删除。如果我发现别的东西会更新

以上是关于在浏览器中关闭 WebSocket 连接时是不是必须手动删除事件侦听器?的主要内容,如果未能解决你的问题,请参考以下文章

在 .NET 应用程序中关闭 MySQL 连接是不是重要? (准确地说,C#)

如何在 c# 中关闭任何浏览器时从 XMPP 注销?

是否需要在 Flask 应用程序中关闭 python SQL 连接?

在 Twisted 中关闭 Perspective Broker 连接

如何在 SwiftMailer 中关闭 SMTP 连接

以编程方式在 C 中检查 NIC 在 linux 中关闭时是不是有链接