【问题标题】:do I have to remove event listener when socket is disconnected?套接字断开连接时是否必须删除事件侦听器?
【发布时间】:2012-11-17 12:20:44
【问题描述】:

在 socket.io 中,当客户端与服务器断开连接时,服务器会为套接字触发 disconnect 事件。我必须从套接字$events 发送removeAllEventListeners() 吗?或者当套接字死亡时它会自动发生吗?听说如果我不这样做,服务器上可能会出现内存泄漏...

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

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

    【讨论】:

    • 是否可以为强制新连接添加以前的事件监听器?不移除监听器是否可以断开客户端?
    • 重新连接后.on('connect' 再次触发,.on('connect' 回调中的侦听器再次分配。我刚遇到这种情况。 1 次重新连接后双听者
    • @LukasLiesis,这个线程是关于代码的服务器部分(NodeJS)发生的事情,而不是在客户端发生的事情。在客户端代码中,您不应在“on('connect')”事件中添加事件,否则它们将在重新连接后触发多次。
    • @diegonunes 现在无法检查,但它不会发生在 nodejs 上吗? .on('connect') 会在每次连接发生时触发,不是吗?不知道你的意思是什么。如果需要在重连时重新添加监听器,为什么不能使用.on('connect')?无论是客户端还是服务器。
    • @LukasLiesis,对不起,如果我的评论不够清楚。在浏览器中,您有一个用于套接字连接(您的个人连接)的长期对象,如果您在socket.on('connect', ...) 内添加类似socket.on('custom', ...) 的事件,您最终将在重新连接后为同一custom 消息获得两个相同的事件.在 node.JS 中,每个“连接”事件都有一个新的“干净”套接字对象,即使它来自旧客户端重新连接,所以在 on('connect', ...) 中添加自定义事件实际上是添加监听事件的正确方法来自您的客户。
    猜你喜欢
    • 1970-01-01
    • 2014-08-28
    • 2018-11-24
    • 2018-09-04
    • 2017-09-08
    • 2016-11-19
    • 2011-12-10
    • 2011-04-29
    • 1970-01-01
    相关资源
    最近更新 更多