我一直在从提供托管服务的某些服务中下载文件。很多时候,当我作为免费用户下载Firefox(其他浏览器也没有全部检查)时,向我显示下载速度为400KB,剩余时间为10分钟。这是BS,因为下载文件需要45分钟或更长时间,例如“1分40秒再现”显示几秒钟。
目前用户速度更快。他们是怎么做到的?这个HTTP协议是作弊还是浏览器作弊?为什么Firefox显示错误的值?
答案 0 :(得分:2)
我从未体验过这一点,但我再也没有使用Firefox下载文件。
也就是说,远程服务器可能正在高速发送文件,但是短时间内的数据突发到其“免费用户”速度。 Firefox可能会看到在这些突发期间下载数据的速度,而不是整体平均速度。
答案 1 :(得分:-2)
许多进度条仅仅是为了让您感觉更好。对于像下载文件这样的东西,很难准确估计。
丢弃并重新发送了多少个数据包?如果带宽在您的机器和服务器之间的某处被阻塞怎么办?需要发送多少数据? (对于文件下载,您可以先发送元数据,但由于多种原因,这在许多情况下会变得复杂)。
这些都是难以或无法准确回答的问题,而且猜测可能会有问题。
认识到用户Don't perceive download times accurately anyway以及实现准确进度条的前景非常缺乏吸引力。简单的方法是制作一个进度条。即使是最好的实现也只是不断修改最佳猜测,并且无法保证猜测的准确性。
解决方案是以一些怀疑态度对待下载时间估算,并且要耐心等待。
答案 2 :(得分:-2)
以下是如何获得真实带宽:
将此脚本称为“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来获得真实时间。