如果您在套接字上多次调用同一个函数的“on”方法,会发生什么?调用多次只是覆盖上一个已注册的函数还是会使用更多资源?
如果出现后者,那么如何确定处理程序是否已经注册?
如果您在套接字上多次调用同一个函数的“on”方法,会发生什么?调用多次只是覆盖上一个已注册的函数还是会使用更多资源?
如果出现后者,那么如何确定处理程序是否已经注册?
我刚刚在Firebug中查看了socket,发现有一个名为'_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)
};
这是最佳实践
socket._callbacks["$" + strHandlerName]
。 - kryo