如何更快地提出OkHttp请求?

时间:2017-09-08 08:01:42

标签: android post android-asynctask okhttp

我发出 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);
    }
  }

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

1 个答案:

答案 0 :(得分:5)

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

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

这也取决于速度有多重要。你想要多少交易速度的正确性。但是有很多原因可能会破坏,因此您需要回退到正确的解决方案。

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