【问题标题】:How to make OkHttp request faster?如何让 OkHttp 请求更快?
【发布时间】:2018-02-17 02:06:15
【问题描述】:

我向安全服务器发出 POST 请求,这需要很长时间。我想让它更快。有机会做吗?它看起来像这样:

  private class GetTokenTask extends AsyncTask<Void, Void, String> {

    private final String LOG_TAG = MainActivity.class.getSimpleName();

    private Call mCallToServer;
    private String mAccessToken;
    private OkHttpClient mHttpClient;
    private JSONObject mResponseJSON;
    private Response mResponseFromServer;

    @Override
    protected String doInBackground(Void... params) {
      mHttpClient = new OkHttpClient();

      mCallToServer = mHttpClient.newCall(requestToOAuth());
      try {
        mResponseFromServer = mCallToServer.execute();
        mResponseJSON = new JSONObject(mResponseFromServer.body().string());
        mAccessToken = mResponseJSON.getString(getString(R.string.access_token_key));

        Log.i(LOG_TAG, mAccessToken);
        Log.i(LOG_TAG, JWTUtils.decoded(mAccessToken));
      } catch (Exception e) {
        e.printStackTrace();
      }
      return mAccessToken;
    }

    @Override
    protected void onPostExecute(String token) {
      super.onPostExecute(token);
    }
  }

也许是另一个图书馆或类似的东西?

【问题讨论】:

  • 你无法真正控制这类事情,因为它可能有很多根本原因:你的网络很慢,服务器同时有很多请求要处理或者请求真的需要一些时间才能完成。最好的机会是从 Postman(或类似的东西)那里尝试一下,看看接收响应所需的时间是否相同。如果为 true,则您实际上无能为力,但如果不是,您应该在发送请求时查看您还做了什么。

标签: android post android-asynctask okhttp


【解决方案1】:

首先,试试 OkHttp 3.9.0 的实验性 EventListener API,看看它在哪里花费时间。

https://github.com/square/okhttp/wiki/Events

这还取决于速度的重要性。您想用正确性换取速度的程度。但是有很多原因可能会失败,因此您需要回退到正确的解决方案。

  • 如果它的 DNS 并且您知道主机,则可以将这些主机用于第一个请求。
  • 尽快运行预热请求以尽快建立第一个连接。
  • 确保 HTTP/2 正常工作。
  • 如果响应很大,则流式传输内容以从第一个字节而不是最后一个字节开始处理。

【讨论】:

    猜你喜欢
    • 2017-06-17
    • 2020-02-10
    • 1970-01-01
    • 2020-06-21
    • 2015-04-26
    • 2019-03-03
    • 2021-01-23
    • 1970-01-01
    • 2020-03-28
    相关资源
    最近更新 更多