为什么要给URLConnection对象使用setConnectionTimeout和SetReadTimeout?
比如setConnectionTimeout会在读取超过设置的时间的情况下报错,我不设置又有啥关系?会出线啥问题呢?使用这两个方法主要是为什么考虑呢?
不设置这两个Timeout也是可以的,因为程序会根据你的操作系统不同使用系统默认的timeout制。
就像@蛮大人123说的那样,这两个参数要根据你的网络环境、业务逻辑、以及程序运行状况做适当调整。
比如connection timeout这个参数。当你的程序通过百兆局域网去远程连接某台服务器上的某个服务端口时,你的网络环境、客户端性能都很好,如果对方服务端口没开,或是不能及时响应你的连接请求,你就没有必要让你的程序(也就是客户端)傻傻的在哪儿等待,而是立刻返回一个消息给用户,告诉用户服务器端无响应。但是,如果你的网络环境很差,比如用28.8kbps的modem做的网络连接,或是你要连接的服务端口非常繁忙,可能你的连接请求被扔到连接队列里在等待,那么你就应该适当放宽connection timeout,以便程序可以正常连接到服务器。像connection这种操作,在程序的一个线程中往往都是同步业务,你不可能跳过connection去直接登录到服务器,所以适当调整timeout既不会让你的客户白白浪费去等待,又可以提高用户体验,就像@蛮大人123说的那样。
同理,ReadTimeout是对数据传输时进行的超时控制。用户从服务器下载一个2G的文件,但是由于用户的网络状况不好,时断时续,你总不能让服务器一直给你开一个连接窗口吧,那样服务器啥也别干了,光伺候这一个用户了,尤其是当所访问的资源有资源锁的issue的时候,更不可能把一个重要的资源一直hang在那里,哪怕是管理想操作都不能操作了。
太长的时间当无法连接的时候会导致程序挂起等待很久,影响用户体验。太短的超时在网速较低但是服务器工作正常的情况下造成无法访问。所以需要根据需要自己设置。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。