我正在尝试为连接到我们电子实验室的客户构建一个速度测试应用程序。我想以 Mbps 为单位测试他们的下载速度。
我想出的逻辑是;在单击事件时,记录开始时间,对 FileResult 控制器进行 ajax 调用以将 2.67 mb jpg 文件返回给客户端。在“成功”后,记录 endTime,减去两个时间戳,然后调用不同的控制器完成一些逻辑并将结果记录到数据库,然后我返回视图以显示结果。
我在我居住的地区的 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>
文件结果控制器
//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);
}