我正在使用连接到服务器的Java套接字.如果我发送HEADER http请求,如何测量服务器的响应时间?我必须使用提供的java计时器,还是有更简单的方法?
我正在寻找一个简短的答案,我不想使用其他协议等.显然我不想要一个将我的应用程序与特定操作系统联系起来的解决方案.请人,仅限IN-CODE解决方案.
curl -s -w "%{time_total}\n" -o /dev/null http://server:3000
您可以在命令行上使用时间和卷曲和时间.curl的-I参数指示它仅请求标头.
time curl -I 'http://server:3000'
我会说这取决于您尝试测量的确切间隔,从您发送的请求的最后一个字节到您收到的响应的第一个字节的时间量?或者直到收到整个回复?或者您是否只想测量服务器端的时间?
如果您只是尝试测量服务器端处理时间,那么您将很难计算出您的请求到达的网络传输所花费的时间以及返回的响应.否则,由于您通过套接字自行管理请求,您可以通过检查系统时钟和计算差异来测量任意两个时刻之间的经过时间.例如:
public void sendHttpRequest(byte[] requestData, Socket connection) { long startTime = System.currentTimeMillis(); writeYourRequestData(connection.getOutputStream(), requestData); byte[] responseData = readYourResponseData(connection.getInputStream()); long elapsedTime = System.currentTimeMillis() - startTime; System.out.println("Total elapsed http request/response time in milliseconds: " + elapsedTime); }
此代码将测量从开始写入请求到完成接收响应的时间,并打印结果(假设您已实现特定的读/写方法).
像这样的东西可能会成功
import java.io.IOException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.URIException; import org.apache.commons.httpclient.methods.HeadMethod; import org.apache.commons.lang.time.StopWatch; //import org.apache.commons.lang3.time.StopWatch public class Main { public static void main(String[] args) throws URIException { StopWatch watch = new StopWatch(); HttpClient client = new HttpClient(); HttpMethod method = new HeadMethod("http://stackoverflow.com/"); try { watch.start(); client.executeMethod(method); } catch (IOException e) { e.printStackTrace(); } finally { watch.stop(); } System.out.println(String.format("%s %s %d: %s", method.getName(), method.getURI(), method.getStatusCode(), watch.toString())); } }
HEAD http://stackoverflow.com/ 200: 0:00:00.404