我即将在我们的网络应用程序中实现互联网连接速度测试。没有要求它必须是一个非常先进的功能,所以我开始尽可能简单。
我们的想法是从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文件createnew c:\ temp \ 1mbfile.txt 1048576
文件正好是1mb。现在来问题了。当我检查例如firebug中的响应时,其大小仅为8.8 kb。这怎么可能?是GZIP压缩吗?它如何将1mb文件压缩到8.8 kb?是因为当您使用fsutil创建文件时,数据是重复的吗?
我搜索的解决方案是强制它不压缩的一种方法(如果这是问题),这可能吗?我找不到设置正确标头以不压缩的方法。
如果是压缩问题并且没有任何关系,我可以检查响应大小并始终指望它在所有环境中都是那么大小吗?
欢迎任何其他想法。如果有这样的想法,也可以考虑如何实施速度测试。
答案 0 :(得分:1)
是的,它可能是一个gzip压缩问题。 fsutil file createnew
创建一个由零组成的文件,因此它当然会非常有效地压缩。
可以使用Fiddler Web调试代理来验证您的Web服务器是否正在使用压缩,如本文所述: HTTP Compression in IIS 6 and IIS 7
答案 1 :(得分:0)
肯定是压缩问题。作为一种解决方法,我没有尝试,但我认为它应该工作,将生成的文件的扩展名更改为Gzip将避免的内容(例如:mp3)并再次尝试测试,看看它是否再次被压缩。 / p>
让我知道发生了什么,谢谢。