【问题标题】:fake estimation of download time下载时间的虚假估计
【发布时间】:2012-04-10 20:38:55
【问题描述】:

我一直在从一些提供托管服务的服务中下载文件。很多时候,当我以免费用户身份下载 Firefox(其他浏览器也是如此,但尚未全部检查)时,会告诉我下载速度为 400KB,距离完成还剩 10 分钟。这是 BS,因为下载文件需要 45 分钟或更长时间,例如“还剩 1 分 40 秒”显示几秒钟。

为用户呈现更高的速度。他们是怎么做到的?这是 HTTP 协议作弊还是浏览器作弊?为什么 Firefox 显示错误的值?

【问题讨论】:

    标签: http firefox download


    【解决方案1】:

    我从来没有遇到过这种情况,但是我从不使用 Firefox 下载文件。

    也就是说,远程服务器可能会以高速发送文件,但会以短时间突发的数据平均达到其“免费用户”的速度。 Firefox 可能会看到这些突发期间的数据下载速度,而不是整体平均速度。

    【讨论】:

    • 我确信这是设计使然。例如rapidshare.comuploaded.to 这样做。由于 95% 的用户使用浏览器下载,他们设法伪造了这个估计。
    • 我认为是这样,至少对我来说是这样。我看到的是下载似乎不时卡住,直到一段时间过去并重新开始。
    【解决方案2】:

    存在许多进度条只是为了让您感觉更好。对于像下载文件这样的事情,很难准确估计。

    有多少数据包被丢弃并重新发送?如果带宽在您的机器和服务器之间的某处阻塞怎么办?需要发送多少数据? (对于文件下载,您可以先发送元数据,但这在很多情况下会因为多种原因变得复杂)。

    这些都是很难或不可能准确回答的问题,而且猜测起来可能会有问题。

    引入用户Don't perceive download times accurately anyway 的想法,实现准确进度条的前景非常没有吸引力。最简单的方法是制作一个进度条。即使是最好的实现也只是不断地修改最佳猜测,无法保证该猜测的准确性。

    解决方案是对下载时间估计持怀疑态度,并耐心等待。

    【讨论】:

    • 这与准确估计无关。它是故意更高的数量级或数量级。
    • 浏览器对剩余时间撒谎,这就是原因。浏览器无法可靠地确定实际剩余时间。考虑到在经常不准确的进度条和根本没有进度条之间进行选择,用户对一些反馈更满意,不管反馈有多有用。考虑到这一点,人们倾向于尝试估算的进度条,但通常只是弥补。
    • @Chris:不,现在进度条在常规下载中运行良好。当然,如果利率中途下降,他们可能会适应,但问题是不同的东西。它是关于一种特殊技巧(可能发送包含未通过 CRC 校验并因此被丢弃的内容的数据包),一些服务器使用该技巧来挫败免费用户,目的是让他们为真正的高下载率付费。这仅与您非常笼统的评论有一定的关系,说明 /all/ 下载栏只是在猜测。
    【解决方案3】:

    以下是获取实际带宽的方法:

    https://superuser.com/questions/356907/how-to-get-real-time-network-statistics-in-linux-with-kb-mb-bytes-format-and-for

    使这个名为“netbps”的脚本可执行

    #!/usr/bin/perl
    use strict;
    use warnings;
    use Time::HiRes;
    
    my $reporting_interval = 10.0; # seconds
    my $bytes_this_interval = 0;
    my $start_time = [Time::HiRes::gettimeofday()];
    
    while (<>) {
      if (/ length (\d+):/) {
        $bytes_this_interval += $1;
        my $elapsed_seconds = Time::HiRes::tv_interval($start_time);
        if ($elapsed_seconds > $reporting_interval) {
           my $bps = $bytes_this_interval / $elapsed_seconds;
           printf "%02d:%02d:%02d %10.2f Bps\n", (localtime())[2,1,0],$bps;
           $start_time = [Time::HiRes::gettimeofday()];
           $bytes_this_interval = 0;
        }
      }
    }
    

    sudo tcpdump -i wlan0 -l -e -n | ./netbps

    我只能说 Firefox 是错误的。该脚本为您提供了每秒字节数的良好估计。大约是firefox估计的1/4。所以新规则:如果感觉 firefox 给出的时间太短,则乘以 4 以获得真实时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 2019-04-28
      • 1970-01-01
      相关资源
      最近更新 更多