开发者社区> 问答> 正文

为什么要使用setConnectionTimeout和SetReadTimeout?

为什么要给URLConnection对象使用setConnectionTimeout和SetReadTimeout?
比如setConnectionTimeout会在读取超过设置的时间的情况下报错,我不设置又有啥关系?会出线啥问题呢?使用这两个方法主要是为什么考虑呢?

展开
收起
蛮大人123 2016-03-12 18:22:42 6398 0
3 条回答
写回答
取消 提交回答
  • 需要及时释放资源
    2019-07-17 19:01:22
    赞同 展开评论 打赏
  • 我是一只会coding的小白熊

    不设置这两个Timeout也是可以的,因为程序会根据你的操作系统不同使用系统默认的timeout制。
    就像@蛮大人123说的那样,这两个参数要根据你的网络环境、业务逻辑、以及程序运行状况做适当调整。
    比如connection timeout这个参数。当你的程序通过百兆局域网去远程连接某台服务器上的某个服务端口时,你的网络环境、客户端性能都很好,如果对方服务端口没开,或是不能及时响应你的连接请求,你就没有必要让你的程序(也就是客户端)傻傻的在哪儿等待,而是立刻返回一个消息给用户,告诉用户服务器端无响应。但是,如果你的网络环境很差,比如用28.8kbps的modem做的网络连接,或是你要连接的服务端口非常繁忙,可能你的连接请求被扔到连接队列里在等待,那么你就应该适当放宽connection timeout,以便程序可以正常连接到服务器。像connection这种操作,在程序的一个线程中往往都是同步业务,你不可能跳过connection去直接登录到服务器,所以适当调整timeout既不会让你的客户白白浪费去等待,又可以提高用户体验,就像@蛮大人123说的那样。
    同理,ReadTimeout是对数据传输时进行的超时控制。用户从服务器下载一个2G的文件,但是由于用户的网络状况不好,时断时续,你总不能让服务器一直给你开一个连接窗口吧,那样服务器啥也别干了,光伺候这一个用户了,尤其是当所访问的资源有资源锁的issue的时候,更不可能把一个重要的资源一直hang在那里,哪怕是管理想操作都不能操作了。

    2019-07-17 19:01:22
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

    太长的时间当无法连接的时候会导致程序挂起等待很久,影响用户体验。太短的超时在网速较低但是服务器工作正常的情况下造成无法访问。所以需要根据需要自己设置。

    2019-07-17 19:01:22
    赞同 1 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载