socket.io客户端:如何确定处理程序是否已安装

5

如果您在套接字上多次调用同一个函数的“on”方法,会发生什么?调用多次只是覆盖上一个已注册的函数还是会使用更多资源?

如果出现后者,那么如何确定处理程序是否已经注册?

2个回答

7

我刚刚在Firebug中查看了socket,发现有一个名为'_callbacks'的成员。

它包含了所有已注册的回调函数,因此检测是否已经注册回调函数就变得非常简单:

    if ( socket._callbacks[strHandlerName] == undefined ) {
    //Handler not present, install now
        socket.on(strHandlerName, function () { ... } );
    }

就是这样!


2
对于我来说(在node.js上使用socket.io-client/engine.io-client),所有的处理程序名称都以$开头。例如:socket._callbacks["$" + strHandlerName] - kryo

1
我习惯以这种方式处理它。
    var baseSocketOn = socket.on;

    socket.on = function() {
        var ignoreEvents = ['connect'] //maybe need it

        if (socket._callbacks !== undefined &&
            typeof socket._callbacks[arguments[0]] !== 'undefined' &&
            ignoreEvents.indexOf(arguments[0]) === -1) {
               return;
        }
        return baseSocketOn.apply(this, arguments)
    };

这是最佳实践


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接