网址,为什么有两个不同的超时?(连接并阅读)



只是好奇。类 URL 连接需要有两个不同的超时是否有充分的理由?

connectTimeout连接时等待的最长时间(以毫秒为单位)。如果在建立连接之前超时已过,则连接到服务器将失败并显示 SocketTimeoutException。

readTimeout是在放弃之前等待输入流读取完成的最长时间。如果在数据可用之前超时已过,读取将失败并显示 SocketTimeoutException。

你能给我一个很好的理由,为什么这两个值应该不同吗?为什么呼叫需要更多时间来执行连接而不是接收一些数据(反之亦然)?

问这个是因为我必须配置这些值,我的想法是为两者设置相同的值。

假设服务器很忙,并且配置为接受"N"连接,并且所有连接都是长时间运行的,突然您发送请求,会发生什么?您应该无限期等待还是应该超时?这就是连接超时。

虽然假设您的服务器只接受连接而对它不做任何事情(或者说服务器同步转到数据库并做一些时间的活动,例如服务器最终陷入死锁),另一方面客户端继续等待响应,在这种情况下,客户端应该怎么做?它应该无限期地等待响应还是应该超时?这就是读取超时。

连接超时是您准备等待从服务器获得某种响应的时间。这与您要实现的目标没有特别关系。

但是,假设您有一个服务,可以为您提供大量数字,并让它返回其素因数。服务器可能需要相当长的时间才能生成答案并将其发送给您。

您可能清楚地期望服务器会快速响应连接:甚至此处延迟 5 秒也告诉您服务器可能已关闭。但是读取超时可能需要高得多:可能需要几分钟才能读取服务器对查询的答复。

连接超时是您希望建立(在正常情况下为 TCP)连接的超时。互联网 RFC 中指定并由各种操作系统实现的默认超时通常在分钟范围内。但我们知道,如果服务器可用且可访问,它将在几毫秒内响应,否则根本不响应。正常值最多为几秒钟。

读取超时是服务器在收到传入请求后预期响应的时间。因此,读取超时取决于服务器提供结果的预期时间内的时间。这些取决于您发出的请求的类型,如果处理需要一些时间或服务器在某些情况下可能非常繁忙,则这些请求应该更大。特别是如果在读取超时后重试,最好将读取超时设置得太低,通常是预期时间的 3-4 倍。

相关内容

  • 没有找到相关文章

最新更新