问题 在断开套接字时,是否必须删除事件侦听器?


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


5116
2017-11-17 12:20


起源



答案:


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


12
2017-11-28 04:41



是否可以为强制新连接添加以前的事件侦听器?不删除监听器是否可以断开客户端? - Vishnu
重新连接后 .on('connect' 再次射击和听众内部的回调 .on('connect' 再次分配。我刚刚遇到这种情况。重新连接1次后双重听众 - Lukas
@LukasLiesis,这个线程是关于代码的服务器部分(NodeJS)发生的事情,而不是客户端。在客户端代码上,您不应在“on('connect')”事件中添加事件,否则它们将在重新连接后多次触发。 - diego nunes
@diegonunes现在无法检查,但是它也不会在nodejs上发生吗? .on('connect') 每次连接都会发生,不是吗?不确定你的观点是什么。如果需要在重新连接时重新添加监听器,为什么不能使用 .on('connect')?无论是客户端还是服务器。 - Lukas
@LukasLiesis,对不起,如果我的评论不够清楚。在浏览器中,您有一个长期存在的套接字连接对象(您的个人连接),如果您添加了类似的事件 socket.on('custom', ...) 在 - 的里面 socket.on('connect', ...) 你最终会得到两个相同的事件 custom 重新连接后的消息。在node.JS中,每个'connect'事件都有一个新的“干净”套接字对象,即使它来自和旧客户端重新连接,所以在其中添加自定义事件 on('connect', ...) 实际上是添加客户端监听事件的正确方法。 - diego nunes


答案:


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


12
2017-11-28 04:41



是否可以为强制新连接添加以前的事件侦听器?不删除监听器是否可以断开客户端? - Vishnu
重新连接后 .on('connect' 再次射击和听众内部的回调 .on('connect' 再次分配。我刚刚遇到这种情况。重新连接1次后双重听众 - Lukas
@LukasLiesis,这个线程是关于代码的服务器部分(NodeJS)发生的事情,而不是客户端。在客户端代码上,您不应在“on('connect')”事件中添加事件,否则它们将在重新连接后多次触发。 - diego nunes
@diegonunes现在无法检查,但是它也不会在nodejs上发生吗? .on('connect') 每次连接都会发生,不是吗?不确定你的观点是什么。如果需要在重新连接时重新添加监听器,为什么不能使用 .on('connect')?无论是客户端还是服务器。 - Lukas
@LukasLiesis,对不起,如果我的评论不够清楚。在浏览器中,您有一个长期存在的套接字连接对象(您的个人连接),如果您添加了类似的事件 socket.on('custom', ...) 在 - 的里面 socket.on('connect', ...) 你最终会得到两个相同的事件 custom 重新连接后的消息。在node.JS中,每个'connect'事件都有一个新的“干净”套接字对象,即使它来自和旧客户端重新连接,所以在其中添加自定义事件 on('connect', ...) 实际上是添加客户端监听事件的正确方法。 - diego nunes