有没有可能让socket.io客户端响应所有事件,而不需要单独指定每个事件?
例如,类似这样的代码(显然现在不起作用):
var socket = io.connect("http://myserver");
socket.on("*", function(){
// listen to any and all events that are emitted from the
// socket.io back-end server, and handle them here.
// is this possible? how can i do this?
});
我希望在客户端socket.io代码接收到任何/所有事件时调用此回调函数。
这个是可能的吗?多么?
发布于 2012-05-02 06:18:14
看起来像是socket.io库将它们存储在字典中。因此,在不修改源代码的情况下,不要认为这是可能的。
来自source
EventEmitter.prototype.on = function (name, fn) {
if (!this.$events) {
this.$events = {};
}
if (!this.$events[name]) {
this.$events[name] = fn;
} else if (io.util.isArray(this.$events[name])) {
this.$events[name].push(fn);
} else {
this.$events[name] = [this.$events[name], fn];
}
return this;
};
发布于 2012-10-15 01:41:08
给你..。
var socket = io.connect();
var globalEvent = "*";
socket.$emit = function (name) {
if(!this.$events) return false;
for(var i=0;i<2;++i){
if(i==0 && name==globalEvent) continue;
var args = Array.prototype.slice.call(arguments, 1-i);
var handler = this.$events[i==0?name:globalEvent];
if(!handler) handler = [];
if ('function' == typeof handler) handler.apply(this, args);
else if (io.util.isArray(handler)) {
var listeners = handler.slice();
for (var i=0, l=listeners.length; i<l; i++)
listeners[i].apply(this, args);
} else return false;
}
return true;
};
socket.on(globalEvent,function(event){
var args = Array.prototype.slice.call(arguments, 1);
console.log("Global Event = "+event+"; Arguments = "+JSON.stringify(args));
});
这将捕获像connecting
,connect
,disconnect
,reconnecting
这样的事件,所以一定要小心。
发布于 2013-04-20 19:53:08
当前(2013年4月)的GitHub doc on exposed events提到了socket.on('anything')
。看起来'anything‘是一个自定义事件名称的占位符,而不是一个可以捕获任何事件的实际关键字。
我刚刚开始使用web套接字和Node.JS,并且立即需要处理任何事件,以及发现发送了哪些事件。我真不敢相信socket.io中没有这个功能。
https://stackoverflow.com/questions/10405070
复制相似问题