是否可以通过监控正常的http请求来衡量网络浏览器上传和/或下载速度?理想情况下,Web应用程序无需任何修改即可告知客户端的速度,并且无需像JavaScript / Java / Flash那样的客户端脚本。因此,即使客户端使用像Curl这样的库访问服务,它仍然可以工作。如果这是可能的,怎么样?如果不可能,为什么?这种方法有多准确?
(如果它有助于假设PHP / Apache,但实际上这是一个独立于平台的问题。同样能够衡量上传速度对我来说更重要。)
答案 0 :(得分:13)
您要求沿路径通常称为“被动”可用带宽(ABW)测量(与测量单个链路的ABW相比)。有许多不同的技术 1 使用被动观察或低带宽“主动”ABW探测技术来估计带宽。但是,生产服务中最常用的算法是 active ABW技术;他们观察来自两个不同端点的数据包流。
我最熟悉yaz
,它从一侧发送数据包并测量另一侧的延迟变化。单侧无源路径ABW测量技术被认为是更实验性的;没有可靠的AFAIK算法实现。
您要求的任务的问题是所有非侵入式 2 ABW测量技术都依赖于计时。可悲的是,在使用http ...
时,时机是一件非常棘手的事情最后,主动ABW技术依赖于结构化数据包流(wrt数据包大小和时间),这与您在标准http传输中看到的不同。
总之,除非您为ABW测量设置专用的客户端/服务器/协议,否则我认为您对结果感到非常沮丧。您可以将您的ABW套接字连接保留在TCP / 80上,但我看到的工具不会使用http 3 。
编辑说明:我的原始答案表明ABW与http是可能的。经过进一步反思,我改变了主意。
<小时/>
yaz
)只是udp。答案 1 :(得分:6)
由于the way TCP connections adapt to available bandwidth,这是不可能的。请求很小,通常适合一个或两个数据包。您需要至少十几个全尺寸数据包才能获得粗略的带宽估计,因为TCP首先必须扩展到可用带宽(“TCP慢启动”),并且您需要平均抖动效果。如果你想要任何准确性,你可能需要谈论数百个数据包。这就是为什么上传速率测量脚本通常会传输几兆字节的数据。
OTOH,您可能能够估计三次握手和确认时间的往返延迟。但下载速度至少与上传速度相同。答案 2 :(得分:3)
javascript或任何浏览器组件都不支持衡量上传性能。
我能想到的唯一方法是,如果要上传到页面/ http处理程序,并且页面正在接收传入的字节,它可以测量每秒接收的字节数。然后将其存储在具有会话ID的某个应用程序范围的字典中。
然后,从浏览器中,您可以定期轮询服务器以使用会话ID获取字典中的值并将其显示给用户。通过这种方式,您可以了解上传速度。
答案 3 :(得分:3)
您可以使用AJAXOMeter,这是一个衡量您的上传和下载速度的JavaScript库。您可以看到实时演示here。
答案 4 :(得分:3)
这通常是不可行的,因为入站和出站带宽经常不对称。不同的ISP在这里具有显着不同的比率,即使在一天的基础上也可以变化。