Socket.io: Как обрабатывать все входящие сообщения на сервере?

Я хочу иметь возможность обрабатывать все сообщения, поступающие от клиентов в одном обработчике.

Пример кода клиента:

var socket = io.connect('http://localhost');
socket.emit('news', { hello: 'test' });
socket.emit('chat', { hello: 'test' });

Пример кода сервера:

io.sockets.on('connection', function (socket) {
socket.on('message', function (data) {
    console.log(data);
}); });

Я хотел бы иметь возможность регистрировать каждое сообщение, даже если оно отправлено на новости, чат или какое-либо другое имя, использующее emit. Это возможно?

Примечание: приведенный выше код сервера не работает. В настоящее время ничего не зарегистрировано. Мне просто интересно, есть ли одно событие, которое можно было бы обрабатывать для всех сообщений для каждого имени эмиссии.

Ответ 1

Это возможно за счет переопределения сокета. Функция $emit

//Original func
var x = socket.$emit;

socket.$emit = function(){
     var event = arguments[0];
     var feed  = arguments[1];

     //Log
     console.log(event + ":" + feed);

    //To pass listener  
    x.apply(this, Array.prototype.slice.call(arguments));       
};

Ответ 2

Это открытая проблема с Socket.IO.

В это время, если вам это действительно нужно, вам, вероятно, придется разблокировать Socket.IO. Подробнее о том, как это сделать, см. комментарий 3-Edens.