【问题标题】:How can I serve HTTP slowly?如何缓慢地服务 HTTP?
【发布时间】:2012-12-01 13:48:21
【问题描述】:

我正在开发一个 http 客户端,我想在需要一些时间才能完成的请求上对其进行测试。我当然可以想出一个 python 脚本来满足我的需要,比如:

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 命令进行带宽限制的方法感兴趣。

【问题讨论】:

    标签: http load-testing


    【解决方案1】:

    我现在使用的解决方案使用“真正的”网络服务器,但配置起来更容易,即 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 )))
    

    这是一个作为 localhost 反向代理的 lighttpd 配置文件;源端口和目标端口,以及服务器总最大带宽作为环境变量给出,因此可以像这样调用它:

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

    在端口 8000 上代理 python 文件服务器,在端口 8001 上以每秒 60KB 的速度进行代理。显然,lighttpd 可以用来提供文件本身,但是这个小脚本可以用来制作任何 http 服务器慢

    【讨论】:

    【解决方案2】:

    在 Windows 上,您可以使用 Fiddler,它是一种 HTTP 代理调试工具来模拟非常慢的速度。也许在您使用的任何操作系统上都存在类似的工具。

    【讨论】:

      【解决方案3】:

      我记得我曾经有过同样的问题,我的搜索发现了一个名为 mod_bw 的 Apache2 模块(即 mod_bandwith)。它对我的测试很有帮助。

      【讨论】:

      • 这是我可以用 nginx 轻松完成的事情。不过,我真正想要的是一个零设置解决方案,就像在一个充满文件的目录中一样简单 python -m SimpleHTTPServer
      猜你喜欢
      • 2019-01-05
      • 2023-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多