Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 测量网络浏览器';s带宽_Performance_Http_Tcp_Network Protocols_Bandwidth - Fatal编程技术网

Performance 测量网络浏览器';s带宽

Performance 测量网络浏览器';s带宽,performance,http,tcp,network-protocols,bandwidth,Performance,Http,Tcp,Network Protocols,Bandwidth,是否可以通过监视正常的http请求来衡量web浏览器的上载和/或下载速度?理想情况下,web应用程序能够告诉客户机的速度,而无需任何修改,也无需像JavaScript/Java/Flash这样的客户端脚本。因此,即使客户端使用Curl这样的库访问服务,它仍然可以工作。如果这是可能的,如何实现?如果不可能,为什么?这个方法有多精确 (如果它有助于假设PHP/Apache,但实际上这是一个独立于平台的问题。对我来说,能够测量上传速度更重要。)javascript或任何浏览器组件都不支持测量上传性能

是否可以通过监视正常的http请求来衡量web浏览器的上载和/或下载速度?理想情况下,web应用程序能够告诉客户机的速度,而无需任何修改,也无需像JavaScript/Java/Flash这样的客户端脚本。因此,即使客户端使用Curl这样的库访问服务,它仍然可以工作。如果这是可能的,如何实现?如果不可能,为什么?这个方法有多精确


(如果它有助于假设PHP/Apache,但实际上这是一个独立于平台的问题。对我来说,能够测量上传速度更重要。)

javascript或任何浏览器组件都不支持测量上传性能

我能想到的唯一方法是,如果您正在上传到页面/http处理程序,并且页面正在接收传入的字节,那么它可以测量每秒接收的字节数。然后使用会话ID将其存储在某个应用程序范围的字典中

然后,您可以从浏览器定期轮询服务器,以使用会话ID获取字典中的值,并将其显示给用户。通过这种方式,您可以知道上传速度如何。

您可以使用一个JavaScript库来测量您的上传和下载速度。你可以看到一个现场演示

由于没有,这是不可能的。请求很小,通常适合一个或两个数据包。您需要至少12个完整大小的数据包才能获得粗略的带宽估计,因为TCP首先必须扩展到可用带宽(“TCP慢速启动”),并且您需要平均抖动效应。如果你想要准确的话,你可能会说需要几百个数据包。这就是为什么上传速率测量脚本通常传输数兆字节的数据


OTOH,您可能能够从三方握手和ACK定时中估计往返延迟。但下载速度的影响至少和上传速度一样大。

这在一般情况下是不可行的,因为入界和出界带宽通常是不对称的。不同的ISP在这方面有显著不同的比率,甚至在一天中的某个时间也会有所不同。

Overview 您要求沿路径测量通常称为“无源”可用带宽(ABW)(相对于测量单个链路的ABW)。有许多不同的技术1使用被动观测或低带宽“主动”ABW探测技术来估计带宽。然而,生产服务中最常用的算法是主动ABW技术;他们观察来自两个不同端点的数据包流

我最熟悉的是,它从一端发送数据包,在另一端测量延迟的变化。单边被动路径ABW测量技术被认为更具实验性;AFAIK没有可靠的算法实现

讨论 您要求的任务的问题是,所有非侵入式ABW测量技术都依赖于计时。遗憾的是,在使用http时,计时是一件非常棘手的事情

  • 您必须处理(例如,)和(它们过早地终止TCP会话,并且经常将web服务器的IP地址欺骗到客户端)的现实
  • 您必须处理可能会间歇性地受到攻击的web主机
最后,主动ABW技术依赖于结构化数据包流(wrt数据包大小和时间),这与您在标准http传输中看到的不同

总结 总之,除非您仅为ABW测量设置专用的客户机/服务器/协议,否则我认为您会对结果感到相当失望。您可以在TCP/80上保持ABW套接字连接,但我看到的工具不会使用http3

编辑注:我最初的回答表明,使用http的ABW是可能的。经过进一步思考,我改变了主意


最后说明:
  • 最常见的入侵技术(如)使用浏览器中的flash或java小程序向每个端点发送和接收3-5个并行TCP流,持续20-30秒。加上流的平均吞吐量(不包括需要重新传输的丢失数据包),就得到了该路径的tx和rx ABW。这显然会对VoIP呼叫或任何正在进行的下载造成相当大的干扰。破坏性测量称为批量传输容量(BTC)。看见BTC测量通常使用HTTP,但BTC似乎不是您想要的
  • 这很好,因为它通过拒绝http缓存要缓存的对象,消除了在线缓存的风险;尽管有些工具(如
    yaz
    )仅限于udp

  • 它给了我错误的结果,由于speedtest.net,我的当前速度下降了:890 KB/s,上升了:564 KB/s,但AJAXOMeter显示,下降了:178 KB/s,上升了:134 KB/s