OkHttp 连接超时



OkHttp 允许您像

    OkHttpClient okHttpClient = new OkHttpClient();
    okHttpClient.setConnectTimeout(connectTimeout, TimeUnit.SECONDS);
    okHttpClient.setReadTimeout(readTimeout, TimeUnit.SECONDS);

以下理解是否正确?

连接超时 - 这是与服务器创建连接之前的超时

读取超时 - 这是连接处于动态状态的时间,无论是否正在读取数据,都将超时。

基于此,在读取超时期间打开的连接会发生什么情况?OkHttp 会让服务器知道连接因超时而关闭吗?一旦出现读取超时,我想关闭与服务器的连接。我不认为 OkHttp (2.2.0) 正在发送靠近服务器的套接字。这可能与SO上的此问题有关

如果 OkHttp 给你一个响应,你负责关闭它的响应正文。最好的方法是使用 try/finally 子句。

Response response = call.execute();
try {
  String line;
  while ((line = response.body().source().readUtf8Line()) != null) {
    System.out.println(line);
  }
} finally {
  response.body().close();
}

ConnectionTimeOut 是 TCP 握手发生的超时。客户端与其服务器之间的连接也是如此。

读取

超时是等待读取数据的超时。如果服务器在超时内的最后一个字节之后无法发送字节,则会引发读取超时错误。

因此,您的连接将自动为您关闭。因此,您只需要执行异常处理。

最新更新