3

我即将在我们的 Web 应用程序中实现 Internet 连接速度测试。没有要求它必须是一个非常高级的功能,所以我开始尽可能简单。

这个想法是从一个 HttpHandler 中获取一些数据,看看它需要多长时间,然后根据数据量和时间计算速度。我认为最好发送十个数据包并丢弃最高和最低时间,然后计算平均时间。

我的 HttpHandler:

public class SpeedTest : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        var Response = context.Response;

        FileInfo file = new FileInfo(@"C:\dev\Project\****\trunk\Application\1mb.txt");

        if (file.Exists)
        {
            Response.Clear();
            Response.AddHeader("Content-Length", file.Length.ToString());
            Response.WriteFile(file.FullName);
            Response.End();
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

这是我的 jquery 代码,它添加按钮并显示一个对话框,我将在其中显示结果等。

$(document).ready(function () {
$('<a href="#">Speedtest</a>').prependTo('#HeaderInfoBarRight').button({
    text: false, icons: { primary: "ui-icon-clock" }
})
    .click(function () {
        var dialog = $('<div></div>').dialog({
            autoOpen: false
            , title: 'Speedtest'
            , modal: true
            , width: 'auto'
            , resizable: false
            , height: 'auto'
            , minHeight: 50
            , close: function () {
                $(this).dialog('destroy').remove();
            }
        });
        var html = '<div>To start the test click below.</div>' +
            '<a href="#">Start test</a>';
        dialog.html(html).dialog('open');
        dialog.find('a').button({ text: true })
        .click(function () {
            var startTest = new Date();
            $.post('SpeedTest.ashx', {}, function (result) {
                var endTest = new Date();
                //Calculate time
            });
        });
    });

});

文件 1mb.txt 是通过 windows 中的命令提示符创建的:

fsutil 文件创建新 c:\temp\1mbfile.txt 1048576

该文件正好是 1mb。现在来解决问题。当我检查例如 firebug 中的响应时,它的大小只有 8.8 kb。这怎么可能?是 GZIP 压缩吗?它如何将 1mb 的文件压缩到 8.8 kb?是因为当您使用 fsutil 创建文件时,数据是重复的吗?

我搜索的解决方案是一种强制它不压缩的方法(如果这是问题),这可能吗?我找不到将正确的标头设置为不压缩的方法。

如果这是一个压缩问题并且没有什么可做的,我可以检查响应大小并始终指望它在所有环境中都是那个大小吗?

欢迎任何其他想法。如果有这样的想法,还有关于如何实施速度测试的想法。

4

2 回答 2

1

是的,这可能是 gzip 压缩问题。 fsutil file createnew创建一个由零组成的文件,因此它当然会非常有效地压缩。

可以使用Fiddler Web 调试代理来验证您的 Web 服务器是否正在使用压缩,如本文所述: IIS 6 和 IIS 7 中的 HTTP 压缩

于 2011-05-14T09:40:13.593 回答
0

肯定是压缩问题。作为我没有尝试但我认为它应该工作的解决方法,将生成的文件的扩展名更改为 Gzip 将避免的扩展名(例如:mp3)并再次尝试测试,看看它是否再次被压缩。

让我知道发生了什么,谢谢。

于 2011-06-29T09:39:49.727 回答