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

标签 java timeout urlconnection

<分区>

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

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

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

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

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

最佳答案

假设服务器正忙并且被配置为接受“N”个连接并且所有连接都是长跑者并且突然间您发送请求,应该发生什么?你应该无限期地等待还是应该超时?那是连接超时。

虽然假设您的服务器变成脑死亡服务,只是接受连接而不对其进行任何操作(或者说服务器同步转到数据库并进行一些时间 Activity ,并且服务器最终陷入死锁,例如),另一方面,客户端保持在等待响应时,在这种情况下客户应该做什么?它应该无限期地等待响应还是应该超时?那就是读取超时。

关于java - URLConnection,为什么有两个不同的超时? (连接并阅读),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27447250/

相关文章:

java - Application Insights 添加 http 过滤器

java正则表达式,匹配数学运算符

java - 带有事件监听器的 Android 多线程

android - 带参数的 URLConnection

java - 将 XML 保存到相对文件位置。

java - Android:在库中使用 SharedPreferences

java - org.glassfish.jersey.client.ClientProperties 超时在 WildFly 上不起作用

javascript - window.location.reload(true) 之后,IE11 中不会发生 URL 重定向

windows - 是什么决定了进程外的 COM 服务器需要多长时间才能注意到客户端已死亡?

java - Android-从 java 运行 php 脚本