【问题标题】:Catch all event "emit" from the client on socket.io在 socket.io 上从客户端捕获所有事件“发出”
【发布时间】:2014-11-07 09:54:03
【问题描述】:

我在我的项目中使用 Socket.io 1.0,我想在服务器上绑定任何事件,例如:

socket.on('*')

所以我可以在我的客户端上这样做:

socket.emit('forum.post')

并且服务器将调用对象“论坛”的函数“发布”。那将是在我的项目中有一个更好的组织。使用我在网上找到的一些方法,我会这样做来覆盖 socket.io 函数:

 var onevent = socket.onevent;
 socket.onevent = function() {
     console.log('***','on',Array.prototype.slice.call(arguments));
     onevent.apply(socket, arguments);
 };

但 socket.on('*') 永远不会被调用。

【问题讨论】:

标签: node.js socket.io socket.io-1.0


【解决方案1】:

对我有用的解决方案(socket-io v1.3.5)。

var Emitter = require('events').EventEmitter;
var emit = Emitter.prototype.emit;
// [...]
var onevent = socket.onevent;
socket.onevent = function (packet) {
    var args = packet.data || [];
    onevent.call (this, packet);    // original call
    emit.apply   (this, ["*"].concat(args));      // additional call to catch-all
};

@Matthias Hopf 问题的解决方案:Socket.io Client: respond to all events with one handler?

【讨论】:

    猜你喜欢
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 2014-12-30
    • 2014-12-07
    • 2016-05-13
    • 2018-01-15
    相关资源
    最近更新 更多