【问题标题】:Java: Anyone know of a library that detects the quality of an internet connection?Java:有人知道检测互联网连接质量的库吗?
【发布时间】:2010-03-15 23:31:26
【问题描述】:

我知道一个简单的谷歌 URLConnection 可以检测我是否连接到互联网,毕竟如果我无法连接到谷歌,我相信互联网一切正常。但我现在正在寻找的是一个库,它可以衡量我与互联网的连接在BOTH响应能力和可用带宽方面的有效性。 但是,我不想衡量有多少带宽可能是可用的,因为这太耗费资源了。我真的只需要能够测试我是否可以在 Y 时间内收到类似 X kB 的东西。这样的库是否已经存在?

【问题讨论】:

    标签: java networking monitoring


    【解决方案1】:

    真的无法判断这一点。在当今的 ADSL 2+ 世界中,下载速度高达 20 多兆比特/秒,您在很大程度上受制于您上游的一切速度。因此,例如,如果您要连接到另一个国家的站点,主要瓶颈可能是国际链接。如果您连接到与您所在城市的站点,那么您可能会受到该服务器的上行链路速度的限制(例如,它们可能是 10MB/s,并且它们会同时为很多人提供服务)。

    所以“我最多可以在 Y 秒内收到 X KB”这个问题的答案完全取决于 您从哪里下载。因此,回答这个问题的最佳方法是实际从您计划下载的位置开始下载,然后确定时间。

    就响应能力而言,基本上是同一个问题。您可以对有问题的服务器进行 ICMP ping,但是许多服务器的防火墙会丢弃 ICMP 数据包而不回复,因此它并不完全准确(此外,如果 ping 远小于 ~100 毫秒,那么对延迟的最大贡献可能来自来自服务器的内部处理,而不是实际的网络,这意味着 ICMP ping 无论如何都是无用的)。

    这在网络特征的一般情况下是正确的——尤其是互联网(因为它非常复杂)——您无法可靠地测量有关站点 X 的任何信息并推断有关站点 Y 的任何信息。如果您想知道站点 Y 的速度有多快会响应,然后您只需连接到站点 Y 并开始下载。

    【讨论】:

    • 呃,世界上有些地区如果你能负担得起稳定的 1Mbit 连接,你会很高兴的 ;)
    • 我只满足于打开一个输入流,确保在 Y 时间内读取 x kB,然后报告成功或失败。这对我来说证明了我所使用的互联网连接是可靠的,因为有时,一些 ISP 会有这些小插曲,它们连接到互联网(TCP 连接打开),但实际上没有或很少有数据通过管道。这就是我需要检查的所有内容,非常基本。虽然一个好的库会重复这个测试并为不同 ISP 骨干上的可靠服务器平均它(例如:level3.net、其他一些骨干等)
    • @BalusC:作为一个澳大利亚人,我当然明白你的意思!我只是说您不能一般这样做,因为有大量人的上游特征远远超过本地链接的“理论”最大值。 @Zombies:啊,我现在明白了。不知道有没有这样的库,不过自己做应该不难。
    【解决方案2】:

    计算用户在给定时间段内可靠下载给定位数的能力可能很复杂——但您可以从http://commons.apache.org/net/ 中的一些代码开始。无论如何,这可以告诉您延迟和带宽。

    【讨论】:

      【解决方案3】:

      在您测量后一毫秒(替换任何其他时间段),答案可能是错误的。

      查看任何提供“剩余下载时间”数字的应用程序。请注意,它通常是不正确的和/或不断更新的,并且只会在最后一秒变得准确。

      基本上,对于任何相当复杂的网络(例如互联网)来说,如此多的变化是不可避免的,以至于唯一真正的衡量标准只有在事后才能获得。

      【讨论】:

        猜你喜欢
        • 2012-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-10
        • 1970-01-01
        相关资源
        最近更新 更多