我正在尝试为连接到我们的电子实验室的客户构建速度测试应用程序。我想以Mbps测试他们的下载速度。
我想出的逻辑是;在单击事件时,记录startTime,对FileResult控制器进行ajax调用,将2.67 mb的jpg文件返回给客户端。 “成功”后,记录endTime,减去两个时间戳,然后调用另一个控制器完成一些逻辑并将结果记录到db,然后返回视图以显示结果。
我在我住的地区的Azure Db服务器上托管。我的结果是1 Mbps,与speedtest.net相比,这似乎很慢,我在同一地区选择服务器的速度为15 mbps。
我想知道这种方法是否有点拙劣?我还在研究基础知识,所以没有实现try catch等。
我页面中的脚本:
<script>
$(document).ready(function () {
$("#downloadFile").click(function () {
var start = Date.now();
var end = null;
var totalSeconds = 0.00;
$.ajax({
url: "/Home/DownloadTest",
success: function (data) {
end = Date.now();
//alert(start + " " + end);
totalSeconds = (end - start) / 1000;
window.location.href = "/Home/DownloadResults?totalSeconds="+totalSeconds;
}
});
});
});
</script>
FileResult控制器
//Download File
public FileResult DownloadTest()
{
string directoryPath = Server.MapPath("~/TestFile/2point67mb.jpg");
string fileName = "DownloadTest.jpg";
return File(directoryPath, "image/jpeg", fileName);
}
查看控制器
//Download Results
public ActionResult DownloadResults(string totalSeconds)
{
double totalSecs = Convert.ToDouble(totalSeconds);
SpeedTest Test = new SpeedTest();
Services.IPAddress ip = new Services.IPAddress();
var clientIP = ip.GetIPAddress();
string[] IPAddresses = clientIP.Split(':');
Test.Address = IPAddresses[0];
double fileSize = 2.67; //Size of File in MB.
double speed = 0.00;
speed = Math.Round(fileSize / totalSecs);
Test.ResponseTime = string.Format("{0} Mbps", speed);
Test.Status = "Success";
Test.UserId = User.Identity.GetUserId();
Test.TestDate = DateTime.Now;
db.SpeedTest.Add(Test);
db.SaveChanges();
return View(Test);
}