Переопределение функций socket.io's emit и on?

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

Возможно ли переопределить socket.emit и socket.on с помощью console.log(arguments)? Если я смогу переопределить это на этапе до моего сокета, это было бы очень элегантно.

Кто-то посоветовал мне вместо этого переопределить парсер.

Каковы ваши 2 цента по этому поводу?

EDIT

Я попробовал предложение Като и написал следующее:

var _origEmit = socket.emit;
socket.emit = function() { 
  console.log("SENT", Array.prototype.slice.call(arguments));
  _origEmit.call(socket, arguments);
};

Это работает. Однако, не так много с socket.on. Моя стратегия заключается в том, чтобы обернуть каждый обратный вызов с console.log. Если вы знаете python, это похоже на наложение декораторов функций на обратные вызовы, которые выводят аргументы в console.log.

(function(socket) { 
var _origOn = socket.on;
socket.on = function() { 
  var args = Array.prototype.slice.call(arguments)
    , handlerType = args[0]
    , originalCallback = args[1];

  var wrappedCallback = function() { 
    // replace original callback with a function 
    // wrapped around by console.log
    console.log("RECEIVED", Array.prototype.slice.call(arguments));
    originalCallback.call(socket, arguments);
  }

  _origOn.call(socket, [handlerType, wrappedCallback]);
}

Кто-нибудь может указать, почему обезьяний патч socket.on не работает?

23
задан disappearedng 13 January 2012 в 10:05
поделиться