【发布时间】:2018-07-07 05:39:02
【问题描述】:
我正在编写一个 java 应用程序,它在执行 http GET 请求时需要非常高效。
我正在使用 netbeans 配置文件功能,它可以让我测量性能,到目前为止我已经尝试了 2 个库:java 默认库和 okhttp。
我注意到,对于每个请求,从我开始构建 url 并执行连接的点到我收到响应代码的点之间需要 1 到 3 秒。这是不是有点过分了?另外,请注意我的电脑和主机之间的 ping 小于 1 毫秒。 openConnection() / execute() 方法怎么会花这么长时间?它甚至正常吗?我怎样才能让它更快?
这就是我使用 okhttp 的方式。 OkHttpClient 客户端仅在我启动应用程序时创建一次
Request request = new Request.Builder()
.url(url)
.build();
try {
Response response = client.newCall(request).execute();
jresp = new JSONObject(response.body().string());
response.close();
} catch (Exception ex) {
ex.printStackTrace();
}
这是使用java默认库的版本
try {
StringBuilder result = new StringBuilder();
URL url = new URL(buyUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader rd;
int code = conn.getResponseCode();
if (code == 200) {
rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
} else {
rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
}
String line;
while ((line = rd.readLine()) != null) {
result.append(line);
}
rd.close();
jresp = new JSONObject(result.toString());
} catch (Exception ex) {
ex.printStackTrace();
}
这两种方法的平均时间如我所说,在 1000 到 3000 毫秒之间
【问题讨论】:
-
这完全取决于您如何处理请求。请发布您的代码。
-
这也取决于服务器需要做什么来产生响应。如果服务器很慢,你真的什么都做不了。
-
我建议使用像 Curl 和/或 WireShark 这样的工具来跟踪请求。如果这是服务器端问题,您无能为力。您可以有一个快速的 ping 时间,但服务器可能正在执行一个缓慢的查询。我已经看到服务器需要几分钟来响应获取请求!您还可以在代码中添加一些带有时间戳的日志记录,以准确查看花费了这么长时间。
-
有很多不同的可能性和原因,以至于这个网站太宽泛了。
-
原帖中添加的代码