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

socket.io client: how to determine if a handler is already installed

如果在套接字上多次调用 'on' 方法来实现相同的功能会怎样?多次调用它是简单地覆盖了最后注册的函数还是它使用了更多资源?

如果是后者,那么如何判断一个handler是否已经注册了?

我刚刚查看了 Firebug 中的套接字,其中有一个名为“_callbacks”的成员。

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

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

就是这样!

我已经习惯了这种方式。

    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)
    };

这是最佳做法