ソケット上の同じ関数に対して 'on'メソッドを複数回呼び出すとどうなりますか?最後に登録された関数を複数回呼び出すか、より多くのリソースを使用しますか?socket.io client:ハンドラがすでにインストールされているかどうかを判断する方法
これが後であれば、ハンドラがすでに登録されているかどうかをどのように判断しますか?
ソケット上の同じ関数に対して 'on'メソッドを複数回呼び出すとどうなりますか?最後に登録された関数を複数回呼び出すか、より多くのリソースを使用しますか?socket.io client:ハンドラがすでにインストールされているかどうかを判断する方法
これが後であれば、ハンドラがすでに登録されているかどうかをどのように判断しますか?
Firebugのソケットを見ただけで、 '_callbacks'というメンバーがあります。
それはとても1がすでに登録されているかどうかを検出するのと同じくらい簡単です、すべての登録済みのコールバックが含まれています。これだけ
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)
};
これは(Node.jsの上socket.ioクライアント/ engine.ioクライアントを使用して)私にとってのベストプラクティス
で、ハンドラ名はすべて、前に$しています。すなわち、 'socket._callbacks [" $ "+ strHandlerName]' – kryo