首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何取消订阅socket.io订阅?

如何取消订阅socket.io订阅?
EN

Stack Overflow用户
提问于 2012-02-24 02:10:50
回答 11查看 57.8K关注 0票数 68

假设有一些对象订阅套接字服务器,如下所示:

socket.on('news', obj.socketEvent)

这些对象的生命周期很短,并且经常被创建,从而生成许多订阅。这看起来像是内存泄漏和容易出错的情况,直观上可以通过这种方式来防止:

socket.off('news', obj.socketEvent)

在对象被删除之前,但是遗憾的是,套接字中没有off方法。有没有其他方法可以做到这一点?

编辑:由于没有找到答案,我正在分配一个空方法来覆盖原始事件处理程序的包装器方法,下面是一个示例。

代码语言:javascript
复制
var _blank = function(){};

var cbProxy = function(){
    obj.socketEvent.apply(obj, arguments)
};
var cbProxyProxy = function(){
    cbProxy.apply ({}, arguments)
}
socket.on('news', cbProxyProxy);

// ...and to unsubscribe 
cbProxy = _blank;
EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2012-03-14 12:45:34

通过查看socket.io.js的源代码(在任何地方的文档中都找不到它),我发现了以下两个函数:

代码语言:javascript
复制
removeListener = function(name, fn)
removeAllListeners = function(name)

我在我的应用程序中成功地使用了removeAllListeners;您应该能够从以下各项中进行选择:

代码语言:javascript
复制
socket.removeListener("news", cbProxy);
socket.removeAllListeners("news");

此外,我认为您的cbProxy = _blank解决方案实际上不会起作用;这只会影响cbProxy变量,而不会影响任何实际的socket.io事件。

票数 89
EN

Stack Overflow用户

发布于 2013-08-09 22:02:13

如果您想创建只“监听”一次的监听程序,请使用socket.once('news',func)。在事件发生后,Socket.io会自动破坏监听器--它被称为“易失性监听器”。

票数 31
EN

Stack Overflow用户

发布于 2016-08-15 23:57:05

查看当前版本的Socket.io Client (1.4.8)的代码,似乎off,都指向相同的函数。

调用其中的任何一个,提供事件名称和/或回调,都可以得到所需的结果。不提供任何东西似乎会重置一切。

请谨慎对待fn/callback参数。它必须与代码中使用的实例相同。

示例:

代码语言:javascript
复制
var eventCallback = function(data) {
  // do something nice
};
socket.off('eventName', eventCallback);

会像预期的那样工作。

示例(也适用):

代码语言:javascript
复制
function eventCallback(data) {
  // do something nice
}
socket.off('eventName', eventCallback);

请注意,您试图移除的回调就是您传入的回调(这个回调可能会带来很多困惑和挫折)。此示例在初始回调周围实现了一个包装器,试图删除不起作用的包装器,因为要添加的实际回调是一个未公开的闭包实例:http://www.html5rocks.com/en/tutorials/frameworks/angular-websockets/

下面是代码库中特定行的链接:https://github.com/socketio/socket.io-client/blob/master/socket.io.js#L1597

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9418697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档