【发布时间】:2012-02-08 14:01:59
【问题描述】:
在开发过程中,能够看到哪些数据包到达和发送对我有很大帮助。这在服务器端使用记录器是可能的。但是,在客户端,没有记录器。我发现自己到处乱扔console.log。
是否可以用 console.log(arguments) 覆盖 socket.emit 和 socket.on?如果我可以在我的套接字之前覆盖它,那将非常优雅。
有人建议我改用 Parser。
你的 2cents 是多少?
编辑
我尝试了加藤的建议并写了以下内容:
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 不起作用?
【问题讨论】: