4

ノードで書かれたアプリ用の小さな開発者ツール (HUD) を構築しています。このツールでは、そのページを提供するために行われたすべての HTTP/HTTPS リクエストを表示したいと考えています (開発者に表示し、その番号を記録するため)。のようなものをラップする必要のない、きれいな方法はありhttp.request()ますか? そうでない場合、HTTP と HTTPS の両方をログに記録するためにラップする必要がある最低レベルのメソッドは何ですか? TCP接続の場合はどうですか?

4

1 に答える 1

6

これに対する答えは、コードがどれほど複雑かによって異なります。リクエストごとに外部リソースに対して 3 つまたは 4 つのリクエストを行う場合、プロファイリング コードを手動で挿入するだけで、おそらく最もクリーンでシンプルなソリューションが得られます。

たくさんのリクエストを発行する場合、モンキー パッチ (ラッピング)は非常に簡単に実行できますhttp.requesthttps.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して、コードのより深い特定の関数/モジュールの使用をプロファイルします。そのソースを読んでください!:)

于 2012-07-28T10:50:25.137 に答える