【问题标题】:How to measure response-time of network using Java?如何使用 Java 测量网络的响应时间?
【发布时间】:2009-04-07 04:17:57
【问题描述】:

我们有一个客户端和一个服务器。我想测量它们之间网络的响应时间。当我向服务器发送请求时,它应该立即响应我的请求,它应该像 ping 请求一样,这样服务器就不会有处理时间。

如何在 Java 中做到这一点?

【问题讨论】:

    标签: java networking response-time


    【解决方案1】:

    我通过从客户端向服务器发送一个带有时间戳的数据包,然后让服务器返回相同的时间戳来做到这一点。当服务器收到时间戳时,它可以与当前时间戳进行比较以测量往返时间。

    显然有一种方法可以在 Java 5 及更高版本中生成ICMP ping。如果要测量网络速度,只需在前后抓取System.nanoTime()并进行比较。请注意,如果您的程序运行时没有足够的权限来执行 ICMP ping,那么 Java 将求助于对端口 7 使用 TCP 回显请求,这仍然可以满足您的需求。

    【讨论】:

    • 但我无法访问服务器,我只能更改客户端应用程序。
    • 如果您无权访问服务器,服务器中是否有任何东西可以用来向客户端返回可以跟踪的内容?
    • 我对服务器没有任何访问权限,而且每次服务器地址都会不同。所以我们只有可以交互和修改的客户端。
    • 我认为java只支持UDP和TCP。但是在ping请求中使用了ICMP,那么我们如何在java中实现呢?
    【解决方案2】:

    为确保服务器尽快响应,您应该

    1. 有第二个连接到不同的端口 - 如果您想测试到服务器的路由,即电线,这很有用 - 或
    2. 所有传入数据包的公共线程,它将决定传入数据包是否是 ping 请求并立即响应 - 如果您想测试当前连接(考虑该连接上的其他数据包),这很有用。

    无论哪种方式,监听部分(服务器)都应该有自己的线程,否则在处理其他数据包时请求的处理可能会过时。

    请注意,无论您如何测量连接速度,都不会得到可靠的值。不过,如果你取几个这样的 ping 的平均值,你应该有一个可以接受的值。

    【讨论】:

      【解决方案3】:

      我认为您需要区分服务器(机器)花费的时间和服务器端进程处理此问题的时间。例如,ping 将简单地测量 ICMP 响应时间,这是一个低级网络协议返回。如果考虑到TCP栈,再由服务器进行后续处理,那个时间段会更大。

      从您的问题来看,听起来 ping (ICMP) 是您想要的。在 JDK 5 及更高版本中,您可以这样做:

      String host = "192.168.0.1"
      int timeOut = 5000; 
      boolean status = InetAddress.getByName(host).isReachable(timeOut)
      

      您需要使用System.nano() 或类似方法来计时。

      【讨论】:

      • 感谢您的帮助。但是我们如何使用这种方法测量响应时间,因为它只返回布尔值。kinaly 帮助。
      • 获取调用前的纳秒数。然后调用它。然后获取之后的纳秒数。从另一个中减去一个,你就得到了时间段。
      • 是的,我也做了同样的事情,但它与 ping 请求不匹配。在 ping 请求中,我得到了 5 毫秒,而对于使用我们的代码的相同 IP 地址,我得到了 1024 毫秒。我认为它不可靠。如果你能帮上忙,我会很感激的。
      • 对我的系统进行快速测试看起来不错。 2个问题。 1) 1,000,000ns = 1ms,是吗? 2) 由于 Java 在运行时的类加载和优化,您可能希望在循环中执行此“n”次并取平均值
      • 是的,1,000,000ns = 1ms。您可以尝试另一个 ip 地址,而不是您的系统 ip。如果您对此有解决方案,请告诉我。
      【解决方案4】:

      使用 ping 应该就足够了,或者wget 跟踪传输速率。您可以使用justniffer 来嗅探“生产”运行服务器的响应时间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-28
        相关资源
        最近更新 更多