2012-11-30 57 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上使用一個或幾個iptables命令(或任何可行的工作)來限制帶寬限制。

回答

5

我現在使用的解決方案使用「真實」網絡服務器,但配置lighttpd更容易。我(其~/bin)增加了以下文件到我的路徑

#! /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))) 

這是作爲反向代理到本地主機的lighttpd一個配置文件;源和目的地端口,以及服務器的總的最大帶寬給定爲環境變量,所以它可以被調用,如:用每秒的低60KB端口8000

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

到代理蟒文件服務器顯然,lighttpd可以用來爲文件本身服務,但是這個小腳本可以用來製作任何 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上,您可以使用Fiddler這是一個HTTP代理調試工具來模擬非常慢的速度。也許一個類似的工具存在於你正在使用的任何操作系統上。

+0

+1;雖然我不在窗戶上,但它可以幫助別人! – SingleNegationElimination