0

我们正在制作一个涉及服务器(tomcat、apache、linux)和多个移动客户端(Android、iPhone、Windows、Nokia J2ME)的应用程序。

通常客户端和服务器将使用http进行通信。

我想从它发出的http请求中知道客户端的下载和上传速度。

理想情况下,我不想上传文件并下载文件以达到这些速度。我假设在 HTTP 协议级别可能有一些东西可以给我这个,或者网络的某个较低层。

4

4 回答 4

2

像那么简单就好了。

即使网络的带宽和延迟定义得很好,实际吞吐量也会受到拥塞窗口和端点在哪里建立慢启动阈值的限制。这些可能会影响吞吐量 20 倍或更多。

HTTP 中没有任何内容可以为这些提供指标。一些 TCP 堆栈将公开有关吞吐量的有限信息(由iftopiptraf使用)。

但是,如果您真的想收集有关 HTTP 吞吐量的有用指标,那么您需要开始通过网络推送数据 - 看看yahoo boomerang的实现。

于 2012-04-12T09:45:21.077 回答
0

我见过一些可以被动执行此操作的真实用户监控 (RUM) 工具(它们从数据中心服务器前面的 SPAN 端口或网络 TAP 获取馈送)

可能有多种方法可以将它们产生的数据集成到您的应用程序中,但我不确定这是否容易,或者考虑到延迟和带宽可以在移动网络上“动态”改变如此准确的方式,我不确定。

我想真正要关注的是应用程序的设计,有多少数据通过网络传输,如何最小化它等等。

需要考虑的另一件事是您是否可以提供一种解决方案,允许将某些应用程序托管在电信公司的 POP 中(一些电信公司将其所有塔楼路由回中央POP,其他电信公司有多个POP)

于 2012-04-13T08:46:58.467 回答
0

HTTP 不处理连接速度。虽然我可以想象一些涉及一些 HTTP(反向)代理的解决方案,该代理估计连接速度并设置自定义标头以传递此信息。您还需要将不同连接的统计信息与特定客户端相关联。我还没有看到一个现成的解决方案。

另请注意

  1. 网络流量可以被缓冲或整形,因此下载速度可能取决于传输的数据量或先前的网络负载。所以即使下载文件也不准确。
  2. 传输的数据量取决于协议级别(包裹在 HTTP 中的有效负载,包裹在 gzip 中,包裹在 TLS 包裹的 TCP 中)。你想测量哪一个?或者你想用这个测量的速度实现什么?
于 2012-04-12T09:55:21.397 回答
0

如果 http 连接先到 Apache 服务器,您可以使用 Apache Bench 进行各种负载测试。它带有 apache,可以通过以下方式调用。

假设我们想看看 Yahoo 处理 100 个请求的速度有多快,最多同时运行 10 个请求:

ab -n 100 -c 10 http://www.yahoo.com/
于 2012-04-12T09:29:40.410 回答