【发布时间】:2012-07-28 18:50:25
【问题描述】:
我正在为一个用 node.js 编写的应用程序构建一个小型开发人员工具 (HUD)。在该工具中,我想显示为服务该页面而发出的所有 HTTP/HTTPS 请求(将它们显示给开发人员并记录它们的编号)。有没有一种干净的方法可以做到这一点,不涉及包装http.request()之类的东西?如果不是,为了记录 HTTP 和 HTTPS,需要包装的最低级别的方法是什么? TCP 连接怎么样?
【问题讨论】:
我正在为一个用 node.js 编写的应用程序构建一个小型开发人员工具 (HUD)。在该工具中,我想显示为服务该页面而发出的所有 HTTP/HTTPS 请求(将它们显示给开发人员并记录它们的编号)。有没有一种干净的方法可以做到这一点,不涉及包装http.request()之类的东西?如果不是,为了记录 HTTP 和 HTTPS,需要包装的最低级别的方法是什么? TCP 连接怎么样?
【问题讨论】:
这个问题的答案取决于您的代码有多复杂。如果您对每个请求发出 3 或 4 次外部资源请求,则只需手动插入分析代码,这可能是最干净、最简单的解决方案。
如果您发出许多请求,猴子修补(包装)http.request 和 https.request 可以很容易地完成。
patcher = (patchMe) ->
original = patchMe.request
patchMe.request = (options, callback) ->
console.log options.host, options.method # or any other counting, profiling
original(options, callback)
http = require 'http'
https = require 'https'
patcher(http)
patcher(https)
如果您想要修补的不仅仅是这些请求,那么在 tcp/udp 级别,很遗憾,您必须阅读源代码才能确定可以修补的底层方法,我没有去过那里。
我喜欢阅读nodetime 的源代码,它对require 函数进行了猴子补丁,以分析代码中更深层次的特定函数/模块的任何使用。去阅读那个来源! :)
【讨论】: