【问题标题】:Java get Response time of GET Restful ServiceJava get GET Restful Service的响应时间
【发布时间】:2017-03-24 07:48:54
【问题描述】:

我有一个 GET Restful service 返回 JSON。我必须获得该服务的响应时间。 我的要求是,当我尝试从该服务获取 JSON 数据时,如果该服务花费的时间超过 10 秒,那么我必须将其重定向到另一个页面。 那我该怎么做呢?

我的代码如下

import java.net.URL;
import java.net.HttpURLConnection;

URL url = new URL(sURL);
HttpURLConnection req = (HttpURLConnection) url.openConnection();
req.connect();

if (req.getResponseCode() == HttpURLConnection.HTTP_OK) {
    System.out.println("ResponseCode = HTTP_OK");
}

我在 Eclipse Mars 1 中使用 Java。

【问题讨论】:

标签: java


【解决方案1】:

HttpURLConnection 有一个setConnectTimeout 方法。

您可以使用它并捕获SocketTimeoutException,然后您可以重定向到您想要的其他页面。

编辑

如果您仍然想要响应以及持续时间,您可以在调用之前获取当前系统时间,然后在响应之后比较您的请求所用的时间。

【讨论】:

    【解决方案2】:

    先设置超时,然后捕获超时异常并发出新请求:

    try {
        req.setConnectTimeout(TimeUnit.SECONDS.toMillis(10)); 
        req.setReadTimeout(TimeUnit.SECONDS.toMillis(10));
    
        [...] readData(req);
    
    } catch (SocketTimeoutException e) {
        // do request again
    }
    

    编辑: readTimeout 是可选的。我一直在使用它,因为我希望等待数据的时间过长。

    【讨论】:

    • 为什么要使用 setReadTimeout?这对我有用吗?
    • 我正在使用“HttpURLConnection req = (HttpURLConnection) url.openConnection();req.setConnectTimeout(10);req.setReadTimeout(10);req.connect();”但它总是让我例外?
    • TIMEOUT 以毫秒为单位?
    • 我正在使用您的代码并等待 10 秒钟,但它对我不起作用。它没有进入 catch 块?
    【解决方案3】:
    long start = System.currentTimeMillis();   
    chain.doFilter(request, response);
    long elapsedTime = System.currentTimeMillis() - start;
    
    if(elapsedTime <= 10){
        System.out.println("ResponseCode = HTTP_OK");
    }
    

    检查elapsedTime是否小于等于10,这里请求和响应来自ServletRequest和ServletResponse

    【讨论】:

      【解决方案4】:

      首先你想 setReadTimeoutsetConnectTimeout 在 url 请求中捕获 java.net.SocketTimeoutException 然后在捕获重定向到你的新 url 如下代码

      import java.net.URL;
      import java.net.HttpURLConnection;
      try {
           URL url = new URL(sURL);
           HttpURLConnection req = (HttpURLConnection) url.openConnection();
           req .setReadTimeout(10000); // 10 seconds
             if (req.getResponseCode() == HttpURLConnection.HTTP_OK) {
                  System.out.println("ResponseCode = HTTP_OK");
               }
          } catch (java.net.SocketTimeoutException e) {
              req = (HttpURLConnection) new URL("your new URL").openConnection();
         }
      

      【讨论】:

        猜你喜欢
        • 2019-11-10
        • 1970-01-01
        • 2015-04-15
        • 2012-01-21
        • 1970-01-01
        • 2017-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多