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)
};
这是最佳做法
如果在套接字上多次调用 '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)
};
这是最佳做法