抛出java.net.UnknownHostException时在哪里检查/设置超时?
有时我的代码尝试连接到不存在的位置,并抛出java.net.UnknownHostException在我的应用程序中可以接受的情况。
我的问题是,抛出异常大约需要20秒钟,这会减慢整个应用程序的速度。
Web服务器版本是Tomcat 7.0.37。我曾尝试在server.xml中将以下连接器的超时设置更改为2秒:
Connector port="8009" protocol="AJP/1.3" redirectPort="8443" connectionTimeout="2000" Connector port="8080" protocol="HTTP/1.1" connectionTimeout="2000" redirectPort="8443"
当我使用HttpURLConnection时,我希望端口8080的连接超时设置生效,但这似乎并非如此。
我还尝试在代码中设置超时:
HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.setConnectTimeout(1000); Reader reader= new InputStreamReader((InputStream) connection.getContent());
但这没有用,有什么想法吗?我想念什么吗?
ta
在DNS中查找主机的时间可能花了很多,在您看来,在查找无法找到的主机时似乎已超时。如果您连接的DNS服务器将请求转发到另一台DNS服务器,并且在合理的时间内没有收到答复,则可能会发生这种情况,这可能是因为配置不正确。
您可以通过使DNS查找超时更早来在操作系统级别解决此问题。例如在Linux下,你可以添加options timeout:2到/etc/resolv.conf使DNS查询超时2秒,而不是默认。在Windows上,您必须编辑注册表设置。
options timeout:2
/etc/resolv.conf
另外,您可以在程序中使用线程进行名称解析来解决此问题。如果您没有在超时后返回线程,则可以指定名称解析将抛出UnknownHostException。
UnknownHostException
第三种选择是使用其他性能更好的DNS服务器,例如Google在8.8.8.8和4.4.4.4中维护的服务器。