Перехват всех событий, исходящих от клиента на socket.io

Я использую 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('*') никогда не вызывается.


person Cxodael    schedule 13.09.2014    source источник
comment
проверьте этот поток stackoverflow.com/questions/10405070/   -  person Dslayer    schedule 13.09.2014
comment
Должно быть легко использовать github.com/turbonetix/socket.io-events.   -  person vesse    schedule 15.09.2014


Ответы (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: реагировать на все события одним обработчиком?

person Maros Pixel    schedule 24.06.2015