首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Socket.io客户端:使用一个处理程序响应所有事件?

Socket.io客户端:使用一个处理程序响应所有事件?
EN

Stack Overflow用户
提问于 2012-05-02 06:08:22
回答 9查看 81.5K关注 0票数 86

有没有可能让socket.io客户端响应所有事件,而不需要单独指定每个事件?

例如,类似这样的代码(显然现在不起作用):

代码语言:javascript
复制
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代码接收到任何/所有事件时调用此回调函数。

这个是可能的吗?多么?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2012-05-02 06:18:14

看起来像是socket.io库将它们存储在字典中。因此,在不修改源代码的情况下,不要认为这是可能的。

来自source

代码语言:javascript
复制
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;
  };
票数 25
EN

Stack Overflow用户

发布于 2012-10-15 01:41:08

给你..。

代码语言:javascript
复制
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));
});

这将捕获像connectingconnectdisconnectreconnecting这样的事件,所以一定要小心。

票数 11
EN

Stack Overflow用户

发布于 2013-04-20 19:53:08

当前(2013年4月)的GitHub doc on exposed events提到了socket.on('anything')。看起来'anything‘是一个自定义事件名称的占位符,而不是一个可以捕获任何事件的实际关键字。

我刚刚开始使用web套接字和Node.JS,并且立即需要处理任何事件,以及发现发送了哪些事件。我真不敢相信socket.io中没有这个功能。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10405070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档