Я собираюсь реализовать тест скорости интернет-соединения в нашем веб-приложении. Нет требования, чтобы это была очень продвинутая функция, поэтому я начал делать ее настолько простой, насколько мог.
Идея состоит в том, чтобы получить некоторые данные из 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
Файл ровно 1мб. Теперь к проблеме. Когда я проверяю ответ, например, в firebug, его размер составляет всего 8,8 КБ. Как это возможно? Это сжатие GZIP? Как он может сжать файл размером 1 МБ до 8,8 КБ? Это потому, что когда вы создаете файл с помощью fsutil, данные повторяются?
Решение, которое я ищу, - это способ заставить его не сжиматься (если это проблема), возможно ли это? Я не могу найти способ установить правильные заголовки, чтобы они не сжимались.
Если это проблема сжатия и с этим ничего нельзя поделать, могу ли я проверить размер ответа и всегда рассчитывать на то, что он будет точно таким же во всех средах?
Любые другие идеи приветствуются. Также идеи по поводу того, как вообще реализовать спидтест, если есть такие идеи.