2012-11-30 10 views
5

私はhttpクライアントで作業しています。終了するまでに時間がかかるリクエストでテストしたいと思います。私は確かに、私のニーズに合うようにPythonスクリプトを思い付くような何かについて可能性:どのようにHTTPをゆっくり提供できますか?

def slow_server(environ, start_response): 
    with getSomeFile(environ) as file_to_serve: 
     block = file_to_serve.read(1024); 
     while block: 
      yield block 
      time.sleep(1.0) 
      block = file_to_serve.read(1024); 

が、これは他の人がすでに発生している問題のように感じています。不条理に低い帯域幅上限、つまりapacheやnginxのようなフルスケールのサーバではなく、静的ファイルを扱う簡単な方法はありますか?

私はLinux上で作業しています。これまでのテスト方法は、python -m SimpleHTTPServer 8000ディレクトリにあります。私は同様に、別の単純なコマンドラインサーバーやtcpポート8000​​(または何が動作するか)で1つまたはいくつかのiptablesコマンドで帯域幅制限を行う方法にも興味があります。

答えて

5

私が今使っている解決策は、「本当の」ウェブサーバーを使用しますが、lighttpdを構成する方がずっと簡単です。私は(その~/binで)私のパスに

localhostにリバースプロキシとして機能するlighttpdの設定ファイルである
#! /usr/sbin/lighttpd -Df 

server.document-root = "/dev/null" 
server.modules = ("mod_proxy") 
server.kbytes-per-second = env.LIGHTTPD_THROTTLE 
server.port = env.LIGHTTPD_PORT 
proxy.server = ("" => (("host" => "127.0.0.1", "port" => env.LIGHTTPD_PROXY))) 

を次のファイルを追加しました。送信元ポートと宛先ポートだけでなく、サーバー合計最大帯域幅は、環境変数として与えられ、それは次のように呼び出すことができます。第二にあたり低い60キロバイトのポート8000​​上のPythonのファイルサーバのプロキシに

$ cd /path/to/some/files 
$ python -m SimpleHTTPServer 8000 & 
$ LIGHTTPD_THROTTLE=60 LIGHTTPD_PORT=8001 LIGHTTPD_PROXY=8000 throttle.lighttpd 

明らかに、lighttpdはファイルそのものを提供するために使用できますが、この小さなスクリプトを使ってany httpサーバが遅くなります

+0

素晴らしいソリューション、私はそれに基づいて小さなDockerコンテナを作成しました:https://hub.docker.com/r/pbertera/lighttpd-throttle/ – Bertera

0

同じ質問がありましたが、私の検索ではmod_bw(mod_bandwithという名前)のApache2モジュールが公開されました。それは私の試練のために私を良く助けました。

+1

これは簡単にnginxでできることです。私が本当に探しているのは、ファイルがいっぱいのディレクトリに 'python -m SimpleHTTPServer'と同じくらい簡単なゼロ設定ソリューションです。 – SingleNegationElimination

1

Windowsでは、非常に遅い速度をシミュレートするHTTPプロキシデバッグツールであるFiddlerを使用できます。同じようなツールがあなたが使用しているOSに存在するかもしれません。

+0

+1;私は窓にはいないが、それは他人を助けるかもしれない! – SingleNegationElimination

関連する問題