在開發過程中,它能幫助我很好地瞭解哪些數據包到達併發送。這在記錄器的服務器端是可行的。然而,在客戶端,沒有記錄器。我發現自己正在亂扔console.log。覆蓋socket.io的發射和on?
是否有可能用console.log(參數)覆蓋socket.emit和socket.on?如果我可以在我的套接字之前覆蓋它,那將非常優雅。
有人建議我改寫解析器。
你的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不工作?
非常感謝。這工作得很好。 – disappearedng 2012-03-14 01:28:40
我很遺憾,我只有1個upvote。 – 2012-10-04 22:34:19
輝煌,謝謝你 – carpii 2013-08-27 17:17:26