我们有一个客户端和一个服务器。我想测量它们之间网络的响应时间。当我向服务器发送请求时,它应立即响应我的请求,它应该像ping请求,以便在服务器上没有处理时间。
我怎样才能用Java做到这一点?
答案 0 :(得分:2)
我通过从客户端向服务器发送带有时间戳的数据包,然后让服务器返回相同的时间戳来完成此操作。当服务器收到时间戳时,它可以与当前时间戳进行比较以测量往返时间。
显然有一种方法可以在Java 5及更高版本中生成ICMP ping。如果您想测量网络速度,只需在之前和之后抓住System.nanoTime()
并进行比较。请注意,如果您的程序运行时没有足够的权限来执行ICMP ping,那么Java将使用TCP回送请求到端口7,这仍然适合您的需要。
答案 1 :(得分:1)
为确保服务器尽快响应,您应该
无论哪种方式,监听部分(服务器)都应该拥有自己的线程,或者在处理其他数据包时,请求的处理可能会失效。
请注意,无论您采取何种措施来衡量连接速度,都无法获得可靠的值。但是,如果你取几个这样的ping的平均值,你应该有一个可接受的值。
答案 2 :(得分:1)
我认为您需要区分服务器(机器)所花费的时间,以及服务器端进程处理此事件的时间。例如,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()
或类似的时间来计算时间。
答案 3 :(得分:0)
使用ping应该足够或wget跟踪传输速率。您可以使用justniffer来嗅探“生产”运行服务器的响应时间。