如何删除 io.on('connection') 监听器?

Posted

技术标签:

【中文标题】如何删除 io.on(\'connection\') 监听器?【英文标题】:How to remove io.on('connection') listener?如何删除 io.on('connection') 监听器? 【发布时间】:2016-01-23 03:19:33 【问题描述】:

我有一些用于 socket.io 服务器的代码,如下所示:

var io = require("socket.io");
io = io(server);
io.on('connection', connectionHandler);

这一切都很好。我想知道如何删除该连接侦听器 - 与套接字不同,似乎

io.removeListener('connection', connectionHandler);

不起作用(我得到“io.removeListener 不是函数”)。如何删除那个 on('connection') 监听器?

如果重要的话,我正在开发一个 socket.io 房间管理库,并且正在编写一个重置函数。我正在使用 Mocha 测试套件之间的重置功能。我想要重置功能来移除 on connection 监听器。

Socket.io 版本为 1.3.7

【问题讨论】:

可能与this Thread重复 这是指套接字 - 我想知道如何为服务器做同样的事情。 你用的是哪个版本? 不等于关闭连接吗? ***.com/a/7492995/2619658 只是猜测 - io.off? 【参考方案1】:

如果您了解 socket.io 如何处理.on(),可以发现它使用默认的***命名空间作为EventEmitterio.on() 只是将函数调用转发到***命名空间对象.因此,您可以获取***命名空间对象,然后在其上调用任何 EventEmitter 方法,如下所示:

var nsp = io.of('/');
nsp.removeListener('connection', connectionHandler);

我已验证这在我自己的测试应用程序中有效,并在调试器中逐步验证它是否按预期工作。

【讨论】:

以上是关于如何删除 io.on('connection') 监听器?的主要内容,如果未能解决你的问题,请参考以下文章

socket.io |我应该将路由处理程序包装在 io.on('connection') 中吗?

io.on('connection')事件是否需要将数据发送到预先存在且已连接的套接字?

有啥不同? .on“连接”与 .on“连接”

如何使用 socket.io 触发消息?

如何通过 socket.io 进行 RPC?

如何在socket.io上执行RPC?