安全智能的http连接断开

时间:2017-04-02 08:58:00

标签: android okhttp

关于连接断开和重用的问题,我对OkHttp的建议用法有几个问题。但是关于这些问题的Android文档并不是那么清楚。所以这里是:

  1. 安全多线程断开连接:
  2. (a)根据Android文档:https://developer.android.com/reference/java/net/HttpURLConnection.html HttpUrlConnection不是线程安全的。

    但是根据OkHttp的作者,推荐的方法是从一个主动使用连接的线程终止活动连接,方法是调用HttpUrlConnection.disconnect()方法:https://github.com/square/okhttp/issues/1842

    那么可以从主动使用连接的线程以外的线程安全地调用此API吗?是否适用于集成到Android中的所有OkHttp版本?

    (b)调用disconnect()之后,还应该通过调用close()API手动关闭InputStream吗?或者一旦断开连接就不需要这个吗?

    1. 关于套接字重用:确保连接可以重用的推荐方法是什么? Android文档说明了以下内容:
    2.   

      一旦读取了响应主体,就应该是HttpURLConnection   通过调用disconnect()关闭。断开连接释放资源   由连接保持,以便它们可以被关闭或重复使用。

      这意味着为了重用套接字,应该调用disconnect()

      然而,这似乎与我读到的其他引用相矛盾,为了重用连接,需要关闭的唯一资源是InputStream,实际上disconnect()不应该被叫。这也暗示了这一点:https://github.com/square/okhttp/issues/702

1 个答案:

答案 0 :(得分:4)

在任何线程上调用disconnect()是安全的,即使在另一个线程正在使用HttpURLConnection时也是如此。这会取消呼叫,但不会释放其资源。

如果您创建了HttpURLConnection,则必须在完成后关闭它。执行此操作的最佳方法是关闭输入流或错误流。您获得以下哪些取决于响应的状态代码。