我们正在制作一个涉及服务器(tomcat、apache、linux)和多个移动客户端(Android、iPhone、Windows、Nokia J2ME)的应用程序。
通常客户端和服务器将使用http进行通信。
我想从它发出的http请求中知道客户端的下载和上传速度。
理想情况下,我不想上传文件并下载文件以达到这些速度。我假设在 HTTP 协议级别可能有一些东西可以给我这个,或者网络的某个较低层。
像那么简单就好了。
即使网络的带宽和延迟定义得很好,实际吞吐量也会受到拥塞窗口和端点在哪里建立慢启动阈值的限制。这些可能会影响吞吐量 20 倍或更多。
HTTP 中没有任何内容可以为这些提供指标。一些 TCP 堆栈将公开有关吞吐量的有限信息(由iftop、iptraf使用)。
但是,如果您真的想收集有关 HTTP 吞吐量的有用指标,那么您需要开始通过网络推送数据 - 看看yahoo boomerang的实现。
我见过一些可以被动执行此操作的真实用户监控 (RUM) 工具(它们从数据中心服务器前面的 SPAN 端口或网络 TAP 获取馈送)
可能有多种方法可以将它们产生的数据集成到您的应用程序中,但我不确定这是否容易,或者考虑到延迟和带宽可以在移动网络上“动态”改变如此准确的方式,我不确定。
我想真正要关注的是应用程序的设计,有多少数据通过网络传输,如何最小化它等等。
需要考虑的另一件事是您是否可以提供一种解决方案,允许将某些应用程序托管在电信公司的 POP 中(一些电信公司将其所有塔楼路由回中央POP,其他电信公司有多个POP)
HTTP 不处理连接速度。虽然我可以想象一些涉及一些 HTTP(反向)代理的解决方案,该代理估计连接速度并设置自定义标头以传递此信息。您还需要将不同连接的统计信息与特定客户端相关联。我还没有看到一个现成的解决方案。
另请注意
如果 http 连接先到 Apache 服务器,您可以使用 Apache Bench 进行各种负载测试。它带有 apache,可以通过以下方式调用。
假设我们想看看 Yahoo 处理 100 个请求的速度有多快,最多同时运行 10 个请求:
ab -n 100 -c 10 http://www.yahoo.com/